我在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)
我该怎么做?
答案 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值相同。