Rails-使用best_in_place gem编辑模型本身定义的数组集合

时间:2012-07-27 23:01:22

标签: ruby-on-rails-3 inplace-editing best-in-place

我见过RailsCasts#302,它描述了使用best_in_place gem进行就地编辑。在那里为性别选项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

1 个答案:

答案 0 :(得分: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

或者,如果不需要动态,您可能需要考虑使用常量。