1

私は3つのモデルを持っています:

 class Project < ActiveRecord::Base
  attr_accessible :name
  has_many :tickets, dependent: :delete_all
 end

 class Ticket < ActiveRecord::Base
  belongs_to :project
  attr_accessible :description, :title,:asset  
  has_many :assets
  accepts_nested_attributes_for :assets
end

class Asset < ActiveRecord::Base
  attr_accessible :title, :body
  belongs_to :ticket
  has_attached_file :asset
end

_形:

<%= form_for([@project,@ticket], html: { multipart: true }) do |f| %>
<p>
    <%= f.label :title %>
    <%= f.text_field :title %>
</p>
<p>
    <%= f.label :description %>
    <%= f.text_area :description %>
</p>

<% number = 0 %>
<%= f.fields_for :assets do |asset| %>
    <p>
        <%= asset.label "File ##{number +=1}" %>
        <%= asset.file_field :asset %>
    </p>
<% end %>
<%= f.submit %>
<% end %>

チケットコントローラー:

def new
 @ticket = @project.tickets.build
 3.times { @ticket.assets.build }
end

問題は、プロジェクトの新しいチケットを作成しようとすると、 ActiveRecord::UnknownAttributeError at /projects/1/tickets/new unknown attribute: ticket_id @ticket= id: nil, title: nil, description: nil, project_id: 1 が表示されることです。 、created_at: なし、updated_at: なし、user_id: なし

エラー メッセージから、チケットの「id」が nil (まだ作成されていない) であることがわかります。そのため、アセットには ticket_id がありません。どうすれば回避できますか?

4

2 に答える 2

1
attr_accessible :ticket_id

モデルでアクセス可能な attr としてこのフィールドを追加する必要があります。

ネストされた属性の場合、project_assets を attr_accessibl/attr_accessor として追加する必要もあります

attr_accessible :project_assets
attr_accessor :project_assets
于 2013-03-19T07:45:48.820 に答える
0

アセットにはnested_form gemを使用する必要があり、関連付けを適切に機能させるには、アセットデータベーステーブルに ticket_id の属性を作成する必要があります。

于 2013-03-18T22:26:37.543 に答える