0

で最初のネストされたフォームを作成していRails 3.2.13ます。User登録していてemail、情報とpassword情報を入力しています..しかし、ユーザーが送信をクリックするとエラーが表示されます。エラーは一番下にあります。addresscompany

この行についてはよくわかりません。attr_accessible :address_attributes, :company_attributes これを読んでも役に立ちますが、そうではなく、ビューに住所がありますが、1対1の関係のためにモデルに住所がありますが<%= f.fields_for :**address** do |builder| %>、フォームがある場合は表示されません。私は何をしなければなりませんか?:-) その後、投稿が送信されます

"companies"=>{"name"=>"Companyname"

ユーザーモデル

class User < ActiveRecord::Base
  attr_accessible ...

    has_many :orders
    belongs_to :address
    belongs_to :company

    accepts_nested_attributes_for :address, :company
    attr_accessible :address_attributes, :company_attributes

会社のモデル

class Company < ActiveRecord::Base
  attr_accessible ...
    has_many :users
    validates_presence_of ...
end

住所モデル

class Address < ActiveRecord::Base
  attr_accessible ...
    has_many :orders, :foreign_key => 'payment_address_id'
    has_many :orders, :foreign_key => 'delivery_address_id'
    has_many :users

    validates_presence_of ...

end

new.html.erb (新しいユーザーの作成)

<%= form_for @user do |f| %>
  ...

  <%= f.fields_for :addresses do |builder| %>
   ...
  <% end %> 

  <%= f.fields_for :companies do |builder| %>
   ...
  <% end %> 

  <%= f.submit %>
<% end %>

送信をクリックしている間のエラー

Can't mass-assign protected attributes: addresses, companies

編集:

最初の間違い: Class Userで変更しました

belongs_to :address
belongs_to :company
on
has_one :address
has_one :company

そして住所と会社のモデルで私は編集します

has_many :users
on
belongs_to :user

しかし、ネストされたフォームはビューに表示されません..buildメソッドを追加してUsers Controllerを編集しようとしました

 def new
   @user = User.new
   @user.company.build
   @user.address.build
 end

しかし、新しいエラーが発生しています

undefined method `build' for nil:NilClass

私は今何をしなければなりませんか?

4

1 に答える 1

1

1日前にこのようなケースがあり、それを使用しました。

class User
  attr_accessible :name, :email, :company_attributes, :address_attributes
  has_one :company
  accepts_nested_attributes_for :company
end

および EmailSetting:

class Company
  belongs_to :user
end

この後、コンソールで実行できます:

User.new.build_company

フォームについて:

<%= form_for @user do |f| %>
  <%= f.fields_for :company do |builder| %>
    <%= f.text_field :name %>
  <% end %>
<% end %>

コントローラーでは、変数を初期化するだけで、実行または@user実行する必要はありません@user.company.build@user.address.build

于 2013-07-12T21:02:32.860 に答える