2

「保護された属性を一括割り当てできません: アップロード」というエラーが表示されますが、アクセスできるように割り当てました。

これは、ポリモーフィックな関連付けを持つネストされたフォームです。

モデル

class Upload < ActiveRecord::Base
  attr_accessible :link, :post_id
  belongs_to :uploadable, polymorphic: true
end

class Post < ActiveRecord::Base
  attr_accessible :description, :title, :uploads_attributes
  has_many :uploads, as: :uploadable
  accepts_nested_attributes_for :uploads, :reject_if => lambda { |a| a[:content].blank? 
  }, :allow_destroy => true
end

私もaccept_nested ... for :uploadableを入れようとしましたが、関連付けが存在しないと言われました

コントローラーの新しいアクションはこれです

def new
  @post = Post.new
  @post.uploads.new
end

ここに作成用のフォームがあります

<%= form_for [:admin,@post], remote: true, :html => {:multipart => true}  do |f| %>
  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title%>
  </div>
  <div class="field">
    <%= f.label :description%><br />
    <%= f.text_area :description %>
  </div>
  <div>
    <%= f.fields_for :upload do |builder| %>
      <%= render 'upload_fields', f: builder %>
    <% end %>
    <%= link_to_add_fields "Add Upload", f, :uploads %>  
  </div>
  <div class="actions">
    <%= f.submit%>
  </div>
<% end %>

パーシャル...

<fieldset>
  <%= f.label :file %><br />
  <%= f.file_field :file %>
  <%= f.hidden_field :_destroy %>
  <%= link_to "remove", '#', class: "remove_fields" %>
</fieldset>

JavaScriptが影響するとは思わないので、ここには入れません。ポリモーフィックな関連付けで「保護された属性を一括割り当てできません」を解決するにはどうすればよいですか?

Plzはこれについて誰か助けが必要です. ファイルをアップロードできないなんて信じられない、チュートリアルではとてもシンプルに見える、そしてうまくいかない、または大量割り当てができない、またはアップロードが保存されていない....

4

3 に答える 3

0

@post.uploads.build代わりに使用してみてください@post.uploads.new

于 2013-04-08T19:15:44.417 に答える
0

関連付けられたモデルは、関係を保存するために親の ID を知る必要があります。次の Railscast をお勧めします: Polymorphic Association。

#uploads_controller.rb
before_filter :load_uploadable

def create
  @upload = @uploadable.uploads.new(params[:upload])
....
end

private

def load_uploadable
  resource, id = request.path.split('/')[1, 2] # /posts/1
  @uploadable = resource.singularize.classify.constantize.find(id)
end
于 2013-10-15T14:59:42.643 に答える
-1

ビュー内のこの行:

<%= f.fields_for :upload do |builder| %>

これでなければなりません:

<%= f.fields_for :uploadable do |builder| %>

モデル上の関連付けはPost「アップロード」ではなく「アップロード可能」と呼ばれるためです。

ネストされた属性を機能させるには、モデルがこのモデルのネストされた属性を受け入れるように指定する必要があります。これはbelongs_to、モデルの下に次の行を配置することで実行できます。

accepts_nested_attributes_for :uploadable

次に、これらの属性をアクセス可能にする必要があります。これは次のように行うことができます。

attr_accessible :uploadable_attributes
于 2012-11-08T22:55:52.537 に答える