Pergunta

Eu estou tentando obter a ActionView-Helper collection_select tomar um valor que será pré-selecionado no menu suspenso.

Nem (:selected no html-opção por hash)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected => @my_collection_object.id}) %>

nem (:selected na opção de hash)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {:selected => @my_collection_object.id}, {}) %>

parecem funcionar.

O que estou fazendo de errado? Alguém pode me ajudar em um presente?

Foi útil?

Solução

A partir da docs :

Exemplo de uso (seleccionando o Author associado para um exemplo de Post, @post):

collection_select(:post, :author_id, Author.all, :id, :name_with_initial)

Se @post.author_id já é 1, este voltaria:

<select name="post[author_id]">
  <option value="">Please select</option>
  <option value="1" selected="selected">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>
</select>

Então você só precisa ter certeza de que @my_object.my_method retorna um valor que corresponde a um dos valores de opção disponíveis. Se há um jogo, então essa opção será selecionada.

Outras dicas

De acordo com a docs , se @my_object.my_method tem a mesmo valor que uma das opções, que um será selecionado por padrão.

Por outro lado, você pode tentar usar options_from_collection_for_select em conjunto com select_tag :

<%= select_tag 'my_object[my_method]', options_from_collection_for_select(@my_collection, :id, :description_string, @my_collection_object.id) %>

Use :selected_value

%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>

Verifique se @ retornos my_object.my_method nulo. Se isso acontecer,

Se chamar o método retorna nil, nenhuma seleção é feita sem incluir: alerta ou: include_blank no hash opções.

Além disso, você pode tentar usar lambda, como no exemplo rdoc

{:disabled => lambda {|category| category.archived? }

No seu caso este será semelhante

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}

Ele também funciona se sua coleção é na forma de uma matriz de matrizes 2 de valor:

CURRENCIES = [["USD", "$"], ["BRL", "R$"]]

<%= collection_select :thing, :currency, CURRENCIES, :first, :last %>

O :first e truque :last funciona muito bem para estas coisas, sem ter que definir um modelo separado para eles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top