Ruby on Rails参数未保存在数据库中

时间:2015-02-26 13:20:11

标签: ruby-on-rails database strong-parameters

我在控制器customer_tasks的视图中有一个表单,它使用的是包含模型customer中列名称的下拉菜单。
在表单中,使用以下内容调用该下拉菜单:

<div class="field">
  <%= f.label :search_column1 %><br>
  <%= select_tag :search_column1, options_for_select(Customer.translated_searchable_columns, params[:search_column1]), :include_blank => true %>
</div>

在我的模型customer中,下拉列表生成为:

def self.searchable_columns
  wanted_columns = ['id', 'aa_code', 'name' ]
  self.column_names.select{ |column| wanted_columns.include?(column) }
end

def self.translated_searchable_columns
  columns = self.searchable_columns
  result = columns.map{ |column [Customer.human_attribute_name(column.to_sym), column] }
  result
end

customer_tasks控制器中,我将:search_column1包含在允许的参数中,例如:

def customer_task_params
  params.require(:customer_task).permit(:task_name, :period, :client_type, :search_column1, search_column1: [])
end

development.log的输出是:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"H4waTsM4D1+EZX+deFozJut6FRS36sVQe7d7a1oRK2w=", "customer_task"=>{"task_name"=>"blah", "period"=>"", "client_type"=>"Γ"}, "search_column1"=>"aa_code", "commit"=>"Ενημέρωση Customer task", "locale"=>"el", "id"=>"4"}

下拉列表正在运行并发送所选的选项。 为什么尽管参数在控制器中是允许的,但它没有被保存/写入数据库?

为什么"search_column1"=>"aa_code"出现在数据库的参数之外?

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您正在使用select_tag,这就是"search_column1"=>"aa_code"出现在数据库参数之外的原因。如果您使用select,它会进入customer_task哈希

将您的select_tag更改为:

<%= f.select :search_column1, options_for_select(Customer.translated_searchable_columns, params[:search_column1]), :include_blank => true %>