我在控制器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"
出现在数据库的参数之外?
我在这里缺少什么?
答案 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 %>