Rails 3.1 - options_from_collection_for_select () передают значение из вложенного атрибута в качестве текста опции - PullRequest
0 голосов
/ 15 марта 2012

У меня есть select_tag, подобный этому:

<%= select_tag "User Groups", options_from_collection_for_select(@user_groups, "id", "name") %>

Вот моя модель

class Entity < ActiveRecord::Base
  has_many :user_groups
end

class UserGroup < ActiveRecord::Base
  belongs_to :entity 
end

Предостережение заключается в том, что для модели UserGroup нет атрибута с именем "name", но есть один для модели Entity.

В идеале я хотел бы передать значения из атрибута "name" в модели Entity в метод options_from_collection_for_select () ... примерно так:

<%= select_tag "User Groups", options_from_collection_for_select(@user_groups, "id", @user_groups.each{|user_group| user_group.entity.name}) %>

Но тогда я получаю что-то вроде этого:

[#<UserGroup id: 1, entity_id: 3, created_at: "2012-03-15 02:36:28", updated_at: "2012-03-15 02:36:28">, #<UserGroup id: 2, entity_id: 4, created_at: "2012-03-15 02:42:36", updated_at: "2012-03-15 02:42:36">] is not a symbol

Есть ли способ, которым я могу использовать options_from_collection_for_select () и передать значение из вложенного атрибута в качестве текста опции?

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

Если вы добавите это в модель вашей группы:

def entity_name
  self.entity.name
end

Вы можете сделать

<%= select_tag "User Groups", options_from_collection_for_select(@user_groups, "id", "entity_name") %>
1 голос
/ 23 декабря 2014

options_from_collection_for_select также принимает лямбду в качестве параметра text_method.

<%= select_tag "User Groups", options_from_collection_for_select(
      @user_groups, 
      "id", 
      lambda { |user_group| user_group.entity.name} ) 
%>

Если у вас есть какой-то специфичный для вида код, которым вы не хотите загрязнять модель, это позволяет вместо этого поместить в представление свой пользовательский метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...