无法理解select_tag如何在rails 4中工作?

时间:2014-06-27 11:43:22

标签: ruby-on-rails

我在rails中有以下代码,

<%= select_tag 'profile', (options_from_collection_for_select(@profiles, :id, :name, @dealer.profileid.to_i))%>    

它产生如下html,

<select id="profile" name="profile">         
  <option value="CM Profile">CM Profile</option>   
  <option value="Admin Profile">Admin Profile</option>     
 </select>

但是我希望选项标签中的值应该是配置文件对象的“id”。但它的名称为@profile object

配置文件表的架构是,

id ==> int(11) ==> auto_increment       

name ==> varchar(20) ==> primary key      

type ==> int(11)   

我该怎么做?

3 个答案:

答案 0 :(得分:0)

根据syntax

<%= select_tag 'profile', (options_from_collection_for_select(@profiles, :id, :name, @dealer.profileid.to_i))%>  

是对的,它应该按你的意愿工作。


除非你的语法是这样的

options_from_collection_for_select(@profiles, :name, :name, @dealer.profileid.to_i)

将产生

<select id="profile" name="profile">         
  <option value="CM Profile">CM Profile</option>   
  <option value="Admin Profile">Admin Profile</option>     
 </select>

答案 1 :(得分:0)

您可以使用options_for_select并手动表单选项

<%=select_tag "profile", options_for_select(@profiles.map{|p| [p.name,p.id]})%>

答案 2 :(得分:0)

这两个答案都没有解决我的问题。但是当改变我的代码时,它对我有用 改变是,

以前我写过像

这样的代码
@profile = Profile.select("id ,name").where("dealertype = ?","2").all

当我迭代这个对象并且打印的id和名字都相同时。

现在我修改为,

@profile = Profile.select("id as profileid,name").where("dealertype = ?","2").all

现在在这种情况下,当我迭代这个对象并打印id和name时,值正确 不像上面的代码。

现在在select_tag

<%= select_tag 'profile', (options_from_collection_for_select(@profiles, :profileid, :name, @dealer.profileid.to_i))%>

而不是id更改为profileid

现在工作正常,

  <select id="profile" name="profile">         
       <option value="1">CM Profile</option>   
       <option value="2">Admin Profile</option>     
   </select>

但我并不知道我在何时进行迭代,

@profile = Profile.select("id ,name").where("dealertype = ?","2").all 

id和name值相同。