如何将那些不属于模型的参数传递给控制器?
script.rb
class Script < ActiveRecord::Base
attr_accessor :directory
attr_accessor :xmlFile
end
show.html.erb
<h1><%= @script.Name %></h1>
<%= simple_form_for @script, :url => script_execute_path(script_id: @script.id) do |f| %>
<%= f.input :directory %>
<%= f.input :xmlFile %>
<%= f.button :submit, 'Run' %>
<% end %>
此处directory
和xmlFile
用于获取输入,但它不是Script
模型的一部分。现在我需要将目录和xmlFile中包含的值传递给我的execute
控制器操作
def execute
@script = Script.find(params[:script_id])
#something like this -- @xmlFile = params[:xmlFile]
end
我如何在此处访问它?
答案 0 :(得分:3)
它们确实是Script
模型的一部分,因为它们被定义为模型的属性。他们没有坚持的事实是无关紧要的。
您可以从代表模型本身的参数哈希中访问它们。您可以确定检查请求日志的确切名称,您将看到参数的结构。
假设模型的名称为Script
,则应将包含脚本属性的哈希键称为script
,因此:
params[:script][:directory]
请注意Ruby不使用camelCase,因此名称xmlFile
不符合约定,可能会导致问题。名称应为xml_file
,而不是xmlFile
。
答案 1 :(得分:1)
对于不属于模型的任意字段,您可以使用Rails的独立标记帮助程序,例如text_field_tag
:
<%= simple_form_for @script, :url => script_execute_path(script_id: @script.id) do |f| %>
<%= text_field_tag :directory %>
<%= text_field_tag :xmlFile %>
<%= f.button :submit, 'Run' %>
<% end %>
如果您想使用现有值预先填充它们,您也可以将其传入:
<%= text_field_tag :directory, 'some default value' %>
答案 2 :(得分:1)
看起来你实际上已经弄明白了。通过声明
attr_accessor :directory
attr_accessor :xmlFile
在您的Script
模型中,您已经有效地将它们作为模型的一部分。保存对象时,它们不会持久保存到数据库中。但只要对象在内存中,那些属性就可用。
由于您已经在视图中定义了这些属性:
<%= f.input :directory %>
<%= f.input :xmlFile %>
通过params
和params[:directory]
params[:xmlFile]
哈希,您可以在控制器中使用它们。