2

best_in_place gem を使用したインプレース編集について説明しているRailsCasts#302を見ました。性別オプションについては、Ryan が show.html.erb 内の配列を使用してドロップダウン ボックスにします (彼が配列を明示的に定義している性別のセクションを参照してください)。

<p>
  <b>Gender:</b>
  <%= best_in_place @user, :gender, type: :select, collection: [["Male", "Male"], ["Female", "Female"], ["", "Unspecified"]] %>
</p>

しかし、私が欲しいのは、次のようにモデル自体の内部で配列を定義したことです:(私の配列要素は単純ではなく、数が少ないため)

例:

user.rb

class User < ActiveRecord::Base
  def authencity_types
    ['Asian', 'Latin-Hispanic', 'Caucasian']
  end
end

best_in_place構文を使用して、この配列要素をドロップダウンとして使用するにはどうすればよいですか。

PS:私はこのようなことを試しました

<% @users.each do |user| %>
  <%= best_in_place user, :authencity, type: :select, :collection => User::authencity_types  %>
<% end %>

しかし、未定義のメソッドauthencity_typesと書かれています

4

1 に答える 1

4

Userモデルでインスタンスメソッドを定義しているので、これを試してください。

<% @users.each do |user| %>
  <%= best_in_place user, :authencity, type: :select, :collection => user.authencity_types  %>
<% end %>

または、このようなクラスメソッドとして定義することもできます。

class User < ActiveRecord::Base
  def self.authencity_types
    ['Asian', 'Latin-Hispanic', 'Caucasian']
  end
end

または、動的である必要がない場合は、定数の使用を検討することをお勧めします。

于 2012-07-28T04:56:10.117 に答える