select_tag релси, показват само определен списък

Имам този модел за компания

class Company < ActiveRecord::Base
   attr_accessible :description, :name, :type
   belongs_to :type, :class_name => "CompanyType", :foreign_key => :company_type_id
end

И този модел за company_type

class CompanyType < ActiveRecord::Base
  attr_accessible :name
end

след това в друг файл _form искам да създам избор, който показва само списък с компании, където типът на компанията е „Финансова“. Ако типът на тази компания е "Нефт", тогава не я показвайте в падащия списък.

Как да го вмъкна в този код select_tag и да променя модела?

<%= select_tag :company, 
    options_from_collection_for_select(Company.order(:name), "id", "name"),
    :include_blank => true%>

person muhihsan    schedule 01.04.2013    source източник


Отговори (1)


<%= select_tag :company, 
options_from_collection_for_select(Company.where(:type => "Financial").order(:name), "id", "name"),
:include_blank => true%>

По принцип просто добавете .where(:type => "Financial"), можете да добавите просто изявление .where там. Въпреки че може да искате да премахнете

Company.where(:type => "Financial").order(:name)

към вашия контролер и го запазете в променлива на екземпляри като тази

@companies = Company.where(:type => "Financial").order(:name)

и логиката на изгледа да изглежда така.

<%= select_tag :company, 
options_from_collection_for_select(@companies, "id", "name"),
:include_blank => true%>

РЕДАКТИРАНЕ НА АКТУАЛИЗИРАНИЯ ВЪПРОС

Модел

class CompanyType < ActiveRecord::Base
  has_many :companies
  attr_accessible :name
end

Контролер

@companies = CompanyType.where(:name => "Financial").companies.order(:name)

и логиката на изгледа да изглежда така.

<%= select_tag :company, 
options_from_collection_for_select(@companies, "id", "name"),
:include_blank => true%>
person rovermicrover    schedule 01.04.2013
comment
Актуализира го за новия ви въпрос. - person rovermicrover; 01.04.2013