簡體   English   中英

Ruby on Rails:無法創建具有多個關聯的對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM