0

私は new.erb.html にそのようなコードを持っています:

<% form_for(@ratification) do |f| %>
  <%= f.error_messages %>

  <% f.fields_for :user do |fhr| %>
    <p>
      <%= fhr.label :url %><br />
      <%= fhr.text_field_with_auto_complete :url %>
    </p>
  <% end %>
<% end %>  

Ratification.rb が空の場合は問題ありません。fields_for は問題なく動作します。

しかし、私が書いた場合:

class Ratification < ActiveRecord::Base
  belongs_to :user
  accepts_nested_attributes_for :user
end

また

class Ratification < ActiveRecord::Base
  belongs_to :user
  def user_attributes=(attr)
  ...
  end
end

f.fields_for は何も生成しません! どうして!?

レール: 2.3.8

オートコンプリート用プラグイン: Repeated_auto_complete

4

5 に答える 5

4

f.fields_forの<%の後に=EQUAL )を追加するだけです

このような:

<%= f.fields_for :user do |fhr| %>
    <p>
        <%= fhr.label :url %><br />
        <%= fhr.text_field_with_auto_complete :url %>
    </p>
<% end %>

obs:Rails3でも同じことをする必要があります

于 2011-07-23T15:37:00.340 に答える
0

user_attributesActiveRecord が指定する標準の動作を上書きするため、再定義することはできません。それでもこれを知っている場合は、alias_method_chainuser_attributesを使用して再定義する必要があります。

于 2010-06-28T11:10:05.187 に答える
0

私はちょうど同じ問題に遭遇し、それを修正することができました. 問題は、引数が必要であるのに引数としてfields_for取ることでした:user@ratification.user

したがって、

<% f.fields_for :user do |fhr| %>

<% f.fields_for @ratification.user do |fhr| %>

それでおしまい。

于 2011-01-23T11:08:27.580 に答える
0

あなたはこれを間違っていませんか?承認がユーザーに属している場合、ユーザー モデルは承認のためにネストされた属性を受け入れる必要があります。その逆ではありません。

したがって、ユーザーが多くの承認を持っていて、単一のフォームでユーザーに対して複数の承認を送信する場合は、ユーザー モデルで承認のために入れ子になった属性を受け入れるを使用します。

そして、ユーザーコントローラーのどこかで行うでしょう

@user = User.new
2.times { @user.ratifications.build } # if you want to insert 2 at a time

私はコンソールで似たようなことをしようとしました:

@user = User.new
@user.ratifications.build # this works

しかし、私がした場合

@ratification = Ratification.new
@ratification.user.build # this fails
于 2010-06-29T10:12:09.077 に答える
0

次のように、コントローラーにユーザーを作成する必要があると思います

# controller
def new
   @ratification = Ratification.new
   @ratification.build_user
end

どうですか

<% f.fields_for :user, @ratification.user do |fhr| %>
   # ...
<% end %>

?

使えば信じる

<% f.fields_for :user do |fhr| %>

@userインスタンス変数として持つ必要があります。しかし、あなたの場合は@ratification.user.

于 2010-06-26T15:30:58.310 に答える