テーブルを更新したいが、更新SQLは実行されないので、変更は無効です。属性の変更が通知されず、テーブルが更新されない
詳細:
元号issue.name私たちの問題です。私は 'qqqqqqqqqqqq'に変更したいです。
コントローラー:
def update
if params['cancel']
redirect_to(@issue)
return
end
@issue = Issue.find(params[:id])
logger.debug "original object"
logger.debug "#{@issue.to_yaml}"
logger.debug 'bulk attribute settings...'
@issue.attributes= params[:issue]
logger.debug "after bulk settings"
logger.debug "#{@issue.to_yaml}"
@issue.events.build(:note=>params[:issue][:description],:verb=>'Edited', :changes=>@issue.textalize_changes)
if @issue.save
logger.debug "after save"
logger.debug "#{@issue.to_yaml}"
redirect_to(@issue)
else
render :action => "edit"
end
end
1つの追加コードfregmentは面白いかもしれませんがtextalize_changes
です:
def textalize_changes
r = ""
if changed?
changes.keys.each do |k|
r << "#{k.humanize} changed "
r << "from `#{translate(k,changes[k][0])}` "
r << "to `#{translate(k,changes[k][1])}`"
r << "<br/>"
end
end
r unless r.blank?
end
結果:
- ライン
@issue.save
すべてが正しいようになるまで。私は@issue
にすべての変更が含まれていることを確認しました。 - ユーザーインターフェイスに変更がありません。
- ログには更新されませんSQLが表示されます。関連するすべての選択と挿入が提示されているにもかかわらず、更新 - それをチェックするときに、私は手動でソースコードの中で属性を変更した場合はそのテーブル
issues
- に変化がさえ
textalize_changes
は - を(
changed?
)を実現しないと、オブジェクトの変更されていませんレベルはname=XXX
で動作しています。
私は何を確認したりレビューしたらよいか分かりません。コードはとてもシンプルで、私はまったく考えていません。ここで
は、操作のログです:
original object
--- !ruby/object:Issue
attributes:
name: OTTO TEST 2
assigned_to: "29"
updated_at: 2010-12-16 10:25:28
project_id: "1"
current_estimate:
lft: "1"
original_estimate:
priority:
id: "10"
version_id:
area_id:
description:
worktype_id: "2"
status_id: "5"
rgt: "2"
parent_id:
created_at: 2010-05-21 07:37:15
fixed_in_version_id:
attributes_cache: {}
bulk attribute settings...
WARNING: Can't mass-assign these protected attributes: description
[4;36;1mIssue Load (0.0ms)[0m [0;1mSELECT "lft", "rgt", "parent_id" FROM "issues" WHERE ("issues"."id" = 10) [0m
after bulk settings
--- !ruby/object:Issue
area:
assigned_user:
attributes:
name: qqqqqqqqqq
assigned_to: "29"
updated_at: 2010-12-16 10:25:28
project_id: "1"
current_estimate:
lft: "1"
original_estimate:
priority:
id: "10"
version_id:
area_id:
description:
worktype_id: "2"
status_id: "5"
rgt: "2"
parent_id:
created_at: 2010-05-21 07:37:15
fixed_in_version_id:
attributes_cache: {}
changed_attributes: {}
children:
events:
fixed_in_version:
iterations:
marked_for_destruction: false
parent:
project:
status:
timelogs:
version:
work_items:
worktype:
[4;35;1mEvent Create (0.0ms)[0m [0mINSERT INTO "events" ("updated_at", "verb", "external", "issue_id", "note", "changes", "user_id", "created_at") VALUES('2010-12-16 10:33:08', 'Edited', 'f', 10, '', NULL, 1, '2010-12-16 10:33:08')[0m
after save
[4;36;1mEvent Load (16.0ms)[0m [0;1mSELECT * FROM "events" WHERE ("events".issue_id = 10) ORDER BY id ASC, created_at ASC[0m
--- &id001 !ruby/object:Issue
area:
assigned_user:
attributes:
name: qqqqqqqqqq
assigned_to: "29"
updated_at: 2010-12-16 10:25:28
project_id: "1"
current_estimate:
lft: "1"
original_estimate:
priority:
id: "10"
version_id:
area_id:
description:
worktype_id: "2"
status_id: "5"
rgt: "2"
parent_id:
created_at: 2010-05-21 07:37:15
fixed_in_version_id:
attributes_cache: {}
技術情報:
- オペアンプシステム:WinXPの
- がレール:レール2.3.4
追加情報:
私は、正しく動作している同じ目的のバルク操作を持っています。私は本当に違いを知らない:
def update_multiple
if params['cancel']
redirect_to issues_path
return
end
@issues = Issue.find(params[:issue_ids])
@issues.each do |issue|
issue.attributes= params[:issue].reject {|k,v| v.blank? }
issue.apply_template_on_name_change
issue.events.build(:note=>params[:issue][:description],:verb=>"Edited", :changes=>issue.textalize_changes)
issue.save!
end
flash[:notice]="Issues updated!"
redirect_to issues_path
end
追加情報:それは、変更を適用し、作業@issue.attributes= params[:issue]
@issue.attributes= params[:issue].reject {|k,v| v.blank? }
によって
は、私は交換してください。しかし、それは私が本当に欲しいものではありません。私はすべてを一度に変えたい。私は夢中になる。
妥当性チェック、またはbefore_saveフィルタを確認しましたか? –
コードセグメン 'もし@ issue.save redirect_to(@issue)'がこのようなことをするでしょう。私はすでに成功事例をチェックして実行しています。 (私はロガーとデバッガを使用してこれらのステップを追跡しましたが、まだ更新操作はありません) – takacsot
'save'の直前に' @ issue'オブジェクトに変更があることを強調したいと思います。 (私は変更された属性を印刷することができます)。メソッドは '変更されましたか?'応答も偽です。 – takacsot