before_saveメソッドが親の@userにアクセスできないことを除いて、オブジェクトのネストされたフォームで作業する際にかかわらず、サブモデル自体を保存するとき...それはしかし正常に動作します。..Rubyのレール3 before_saveメソッドがオブジェクトがnilである親モデルにアクセスするため、ネストされたフォームが保存されない
ので、ここでは簡略化されたコード
class Forum < ActiveRecord::Base
has_many :forum_post, :dependent => :destroy
belongs_to :project
accepts_nested_attributes_for :forum_post, :reject_if => :all_blank
end
class ForumPost < ActiveRecord::Base
belongs_to :forum
belongs_to :user
before_save :toggle_forum
has_attached_file :attachment
def toggle_forum
#a bunch of code
#one line tries to access @user.id but it fails because @user is nil
@user.id
end
end
はその後、これを更新し、私のForumControlerコントローラに私が
を持っていますdef update
@forum = Forum.find(params[:id])
if @forum.update_attributes(params[:forum])
redirect_to(user_forum_path(@user,@forum.project,@forum), :notice => 'Forum was successfully updated.')
else
render :action => 'submit'
end
エンド
そして、私の意見で:
<%= form_for(@forum, :url => user_forum_path, :html => { :multipart => true, :id => :project }) do |f| %>
<div class="form-label-row summary-text">
<%= f.label(:summary_text, 'Final Summary') %>
<%= f.text_area :summary_text %>
</div>
<%= f.fields_for :forum_post,$forum_post do |child_form| %>
<div class="form-row-left attachment">
<%= child_form.label :attachment %>
<%= child_form.file_field :attachment %>
</div>
<!-- I tried adding with and without the next 2 hidden fields and it failed either way -->
<%= child_form.hidden_field :user_id, :value=>@user.id %>
<%= child_form.hidden_field :forum_id, :value=>@forum.id %>
<% end %>
<%= hidden_field(:forum, :state, :value => :student_completed) %>
<div class="form-buttons" id="submit">
<%= f.submit "Submit Project" %>
</div>
<% end %>
問題は@userがnilの場合、ネストされたオブジェクトとしてforum_postを保存するときにということです..私は、独自のモデルでforum_postを保存する場合、それは動作します良い。 @user変数が親オブジェクトから保存するときに値が設定されない理由は何ですか?
@userはどこに作成されましたか?あなたの更新作業のどこからも来ていないようです。 – bostonou