Rails将选择标记设置为预定值

时间:2016-05-05 11:52:32

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个添加功能+视图。在某些情况下,用户可以指定执行某些操作并调用应该向add函数提交id的函数。 (有效)

现在我想要如果这个参数不是nil那么选择标记应该用这个值预先设定。

我试过了:

<% if !params[:channel_id].nil? %>
      <% :channel_id << params[:channel_id] %>
<% end %>

这不起作用。

选择标记如下所示:

<%= f.collection_select :channel_id, @channels, :id, :channelname, {prompt: (t "channel.add.prompt")}, class: "form-control", :required => :true %>

是否有解决方案来实现这一目标?

3 个答案:

答案 0 :(得分:3)

您只需将值添加到collection_select

即可
<%= f.collection_select :channel_id, @channels, :id, :channelname, 
      { 
        prompt: t('channel.add.prompt'),
        selected: params[:channel_id]
      }, 
      class: 'form-control', required: true %>

另一个选项 - 我更喜欢 - 是在初始化表单对象时设置此值。这取决于form_for的外观,但可能如下所示:

# in the controller
@model = Model.new(channel_id: params[:channel_id])

# in the view
<%= form_for @model do |f| %>

如果以这种方式完成,则无需更改collection_select标记。

答案 1 :(得分:0)

使用selected:

<%= f.collection_select :channel_id, @channels, :id, :channelname, {prompt: (t "channel.add.prompt"), selected: "<id of record to be selected>"}, class: "form-control", :required => :true %>

答案 2 :(得分:0)

你可以尝试

<%= f.collection_select :channel_id, @channels, :id, :channelname, prompt: (t "channel.add.prompt"), class: "form-control", :required => :true, selected: params[:channel_id] || 2 %>