2013-05-07 49 views
1

我在創建具有關聯的對象時遇到問題。Ruby on rails:創建具有多個關聯的對象時遇到問題

我有一個消息模型belongs_to的工作,和用戶或亞軍。在我的jobs/index.html內部,我想顯示一份帶有相應消息的作業列表和一個表單,爲該特定作業創建一條新消息。

的問題是,每當我創建了一個消息,JOB_ID保持爲零。我對軌道上的紅寶石很陌生,所以我還沒有完全理解這個東西。

這是我的工作/ 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 %> 

以下是在消息控制器的創建方法(注: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 

每當我提交作業/ index.html的視圖內消息形式,它似乎成功創建帶有user_id或runner_id的消息已成功填寫(具體取決於發佈消息的人員),但我的job_id屬性爲零。

回答

1

由於您的消息屬於工作,我想你應該在就業形式內創建嵌套資源。

你的工作模型內部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

我還要補充,如果你只是想廣告d向現有作業發送消息,只需在表單中正確傳遞job_id的參數,並確保您參考的作業實際上存在。

+0

我不知道我是否可以做到這一點,新用於創建新的工作,而不是消息。 – user2158382 2013-05-07 22:17:52

+0

確定你可以。觀看我剛剛添加到我的回覆中的視頻 – Kristian 2013-05-07 22:20:48

+0

謝謝,該視頻很有幫助,但並未解決我的問題。 – user2158382 2013-05-08 00:25:54

0

爲了解決這個問題,我決定手動創建消息,並且它屬於通過在表單的隱藏字段的作業之間的紐帶。

    <%= 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 %>