2010-12-15 19 views
0

テーブルを更新したいが、更新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? }によって

は、私は交換してください。しかし、それは私が本当に欲しいものではありません。私はすべてを一度に変えたい。私は夢中になる。

+0

妥当性チェック、またはbefore_saveフィルタを確認しましたか? –

+0

コードセグメン 'もし@ issue.save redirect_to(@issue)'がこのようなことをするでしょう。私はすでに成功事例をチェックして実行しています。 (私はロガーとデバッガを使用してこれらのステップを追跡しましたが、まだ更新操作はありません) – takacsot

+0

'save'の直前に' @ issue'オブジェクトに変更があることを強調したいと思います。 (私は変更された属性を印刷することができます)。メソッドは '変更されましたか?'応答も偽です。 – takacsot

答えて

0

私は素晴らしいネストセットでこの問題を発見しました。

このプラグインは、ネストされたセット操作を実行する直前にオブジェクトをリロードします。:コントローラを次のように変更しました:

@issue.parent_issue= params[:issue][:parent_issue] 
@issue.attributes= params[:issue].reject {|k,v| 'parent_issue'==k } 

これは現在最良の解決策です。

注:parent_issueは、指定されたエンティティの親を設定し、残りの属性と同じフォームを使用します。

0

エラーを表示するには、@issue.save!のような感嘆符で保存してみることができますか?

+0

はい私はすでに作っています。エラーはありません。まだ何もない。 – takacsot

関連する問題