[英]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.