[英]Ruby on rails: Trouble creating an object with multiple associations
我在创建具有关联的对象时遇到问题。
我有一个属于工作的Message模型,以及一个用户或跑步者。 在我的jobs / index.html内部,我想显示一个带有相应消息的工作列表,以及一个为该特定工作创建新消息的表格。
问题是,每当我创建一条消息时,job_id都保持为零。 我是红宝石的新手,所以我仍然不完全了解这些东西。
这是我的jobs / index.html的一部分(注意:不是我的实际代码,我在课堂上,所以我只是键入了此内容,可能包含语法错误)。
<% @jobs.each do |job| %>
<p> <%= job.body %> </p>
<%= form_for job.messages do |f| %>
<%= f.label :body %>
<%= f.text_field :body %>
<%= f.submit %>
<% end %>
<%if job.messages.present? %>
<ul>
<% job.messages.each do |message| %>
<li>
<p> message.description <p>
</li>
<% end %>
</ul>
<% else %>
<p> No messages <p>
<% end %>
<% end %>
这是消息控制器中的create方法(注意:current_login可以是运行者或用户,它们都共享相同的属性)
def create
@message = current_login.messages.new(params[:message])
@message.save
end
作业控制器索引动作
def index
@jobs = Job.all
end
讯息模型
class Message < ActiveRecord::Base
attr_accessible :description
belongs_to :user
belongs_to :runner
belongs_to :job
end
用户模型
class User < ActiveRecord::Base
attr_accessible :username
has_many :jobs
end
跑步者模型
class Runner < ActiveRecord::Base
attr_accessible :username
has_many :jobs
end
工作模式
class Job < ActiveRecord::Base
attr_accessible :body
has_many :messages
belongs_to :user
belongs_to :runner
end
每当我在Jobs / index.html视图内提交消息表单时,似乎都可以成功创建一条消息,并成功填写了user_id或Runner_id(取决于发布消息的人),但是job_id属性却为零。
由于您的消息属于工作,我认为您应该在工作表格中创建嵌套资源。
Jobs模型中的new
控制器函数应按以下方式建立关联:
def new
@job = Job.new(params[:job])
@message = @job.build_message
end
您的创建模型只需要保存父模型:
def create
@job = Job.create(params[:job])
end
有关如何执行此操作的大量详细信息,请观看以下railscast: http: //railscasts.com/episodes/196-nested-model-form-part-1
我还应该添加,如果您只是想向现有作业中添加一条消息,只需在表格中正确传递job_id的参数,并确保您所引用的作业确实存在。
为了解决此问题,我决定通过表单中的隐藏字段手动在消息和消息所属的作业之间创建联系。
<%= form_for(@message) do |f| %>
<%= f.label :body, "Description" %>
<%= f.text_area :body %>
<%= f.hidden_field :job_id, value: job.id %>
<%= f.submit 'Create message', class: 'button small secondary' %>
<% end %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.