rails 4 form_tag用法

Ata*_*ang 4 forms ruby-on-rails

我正在使用rails 4.0.2框架.我有一个图片脚手架,从'图片'的显示页面我正在努力添加一个简单的内置表单,以将其转发到电子邮件地址.
输入电子邮件并单击"转发"按钮后,它应在电子邮件中发送当前图片链接.但我正在努力实现这一目标.我使用动作'create'创建了一个控制器'forward_picture',并将其作为资源添加到config/routes文件中.然后我在图片视图中创建了一个表单,如下所示.

意见/图片/ show.html.erb

...   
<%= form_tag(:controller => "forward_picture", :action => "create") do %>  
  <%= hidden_field_tag :picture_id, params[:@picture.id] %>  
  <%= label_tag :email %>  
  <%= text_field_tag :email, params[:email] %>  
  <%= submit_tag "Forward" %>    
<% end %>  
Run Code Online (Sandbox Code Playgroud)

这是在forward_picture_controller中嵌入表单,传递参数和调用适当的操作(创建)的正确方法吗?如何在rails 4中使用强参数策略来访问控制器中的参数?在控制器中,我可以构造一个适当的URL来发送给定的电子邮件地址.

任何帮助表示赞赏.

Mar*_*iro 6

创建路线并给它们命名通常是一种很好的做法.在routes.rb文件中:

post :forward_picture, to: "forward_picture#create", as: :forward_picture
Run Code Online (Sandbox Code Playgroud)

最后一个属性,在这里定义:

as: :forward_picture
Run Code Online (Sandbox Code Playgroud)

将为您的路由创建"名称",从而创建一个可以从任何视图调用的name_path方法.您的表单可以像这样使用它:

<%= form_tag forward_picture_path do %>
Run Code Online (Sandbox Code Playgroud)

至于参数,你应该能够通过params [:email]或params [:picture_id]来获取.强参数仅用于质量赋值,即product.create(params [:product]),其中params可能具有Product模型的多个属性.那时你想要消化params [:product]哈希,以确保你只是允许你需要的东西.这是你使用安全参数时.