1

最近、 Nested Formをテストすることにしました。gem のインストールから各モデルの修正までは順調に進んでいたのですが、実物を試してみると運が尽きてしまいました。

モデル

他のすべての友情モデルと同様に、Userは として自己参照し:friendます。

class Share < ActiveRecord::Base
    belongs_to :user
    belongs_to :friend, :class_name => "User"
end

これは私のペーパークリップモデルです:

class Upload < ActiveRecord::Base
    belongs_to :user
    has_attached_file :document

    FILE_FORMAT = ["Audio", "Document", "Image", "Video"]
end

これはDeviseによって生成されます:

class User < ActiveRecord::Base
    attr_accessor :login

    has_attached_file :image, :styles => { :medium => "120x120!" }

    has_many :uploads
    has_many :shares
    has_many :friends, :through => :shares
    has_many :inverse_shares, :class_name => "Share", :foreign_key => "friend_id"
    has_many :inverse_friends, :through => :inverse_shares, :source => :user

    accepts_nested_attributes_for :uploads
end

フォーム

これはネストされていないフォームで、正しく機能しました。

<%= simple_form_for(upload, defaults: { wrapper_html: { class: 'form-group' }, input_html: { class: 'form-control' } }, html: { multipart: true }) do |f| %>
    <%= f.input :file_name, label: "File Name:", input_html: {size: 19} %>
    <br /><br />
    <%= f.input :file_type, as: :select, collection: Upload::FILE_FORMAT, label: "File Type:" %>
    <br /><br />
    <%= f.input :document, as: :file, label: "File Path:" %>
    <br /><br />
    <%= f.submit "Upload File" %>
<% end %>

これは私が修正しようとしているフォームです:

<%= simple_nested_form_for @user, url: uploads_path(@user), html: { method: :post } do |f| %>
<%= f.fields_for :uploads do |ff| %>
  <%= ff.input :file_name, label: "File Name:", input_html: {size: 19} %>
  <br /><br />
  <%= ff.input :file_type, as: :select, collection: Upload::FILE_FORMAT, label: "File Type:" %>
  <br />
  <%= ff.input :document, as: :file, label: "File Path:" %>
  <br /><br />
  <%= ff.submit "Upload File" %>
  <br /><br />
<%= ff.link_to_remove "Remove Document" %>
<% end %>
<%= f.link_to_add "Add Document", :uploads %>
<% end %>

発生したエラー

A. @upload(@upload = Upload.newコントローラーにある) を使用すると、ArgumentError in Uploads#new.

<%= simple_nested_form_for @upload, url: uploads_path(@upload), html: { method: :post } do |f| %>

Invalid association. Make sure that accepts_nested_attributes_for is used for :uploads association.

B. 修正しようとしているフォーム (「フォーム」セクションを参照@user = current_user) が、編集要求として表示されているようです。フォームへの入力を許可する代わりに/uploads/new、対応するすべての user の値を使用してすべてのフォームをロードします。:uploads

C. 同じフォームから送信するとparam not found: uploadエラーが発生する。

ActionController::ParameterMissing in UploadsController#create

質問

通常のフォームとして機能できるようにするには、ネストされたフォームをどのように修正する必要がありますか?

ありがとうございました。

4

0 に答える 0