2013-07-17 4 views
23

Как перевести следующую простую форму?Rails 4 simple_form collection_select

<%= form_for(@bill) do |f| %> 

<%= f.label :location_id %> 
<%= f.collection_select(:location_id, @locations, :id, :location_name, 
     {:selected => @bill.location_id}) %> 

Я не могу использовать простую ассоциацию, потому что @locations является результатом запроса where.

ответ

56

Попробуйте эту

<%= simple_form_for @bill do |f| %> 
    <%= f.input :location,:collection => @locations,:label_method => :location_name,:value_method => :id,:label => "Location" ,:include_blank => false %> 
    <%= f.button :submit %> 
<%end%> 

надеюсь, что это поможет

+0

Работает после удаления дополнительной «коллекции:», за исключением того, что она добавляет пробел, который я не хочу. – markhorrocks

+0

@markhorrocks Существует опция, называемая 'include_blank => false', просто добавьте ее – Viren

+0

@markhorrocks Отредактированный ответ с параметрами' include_blank => false' – Viren

2

В простой форме, если мы имеем связь между местоположением и счетами, чем мы можем сделать так:

<%= simple_form_for @bill do |f| %> 
    <%= f.association :location, collection: @locations, priority: @bill.location %> 
    <%= f.button :submit %> 
<% end %> 

Надеется, что это поможет.

+0

Там такая ассоциация, но @locations = Locati on.where (club_id: club_id), однако, похоже, что он все еще может работать? – markhorrocks

+0

Это не работает. – markhorrocks

+0

Если у вас нет правильной ассоциации, то: <% = f.input: location, collection: @locations%> –

6

Вот окончательный:

<%= f.input :location_id, collection: @locations, label_method: :location_name, value_method: :id,label: "Location", include_blank: false, selected: @bill.location_id %> 
+0

Это правильный способ сделать это в простой форме –

0

В модели определения местоположения, можно также создать:

def to_label 
    location_name 
end 
Смежные вопросы