强大的参数和动作邮件问题

时间:2014-11-19 23:20:33

标签: ruby-on-rails

我尝试使用以下代码创建邮件程序:

路线代码

resources :listings do
  member do
    put :lead
  end
end

邮件程序控制器代码

  def lead(listing)
    @listing = listing
    mail(to: @listing.leadrecepient, subject: "test")
  end

标准控制器代码

  def lead
    Enquiry.lead(@listing).deliver
  end

视图

<%= form_for lead_listing_path(@listing), method: :put do |listing| %>
  <%= listing.text_field :name %>
  <%= listing.submit %>
<% end %>

在商业目录的上下文中,我想要它,以便在每个列表页面上都有一个查询表格,当填写并提交时,该信息将被发送到相关列表电子邮件。

但问题是,当我在表单中输入并单击“提交”时,出现以下错误:

param is missing or the value is empty: listing

这似乎是因为我在“列表”控制器中有它,它控制着商业列表本身的显示和创建。因此,对于包含所有新列表变量的新列表,我有强大的参数:

  def listing_params
    params.require(:listing).permit(:fullname, :jobtitle, :email, :franchisename, :leadrecepint, :shortdescription, :longdescription, :website, :branchcount, :scale, :mininvestment, :investmentrange, :category, :hexbg, :logourl, :facebook, :twitter, :linkedin, :googleplus, :approved)
  end

我该如何解决这个问题?如果我是诚实的话,我是初学者,可以帮助这个邮件工作!谢谢。

1 个答案:

答案 0 :(得分:1)

强大的参数适用于提交新资源或修改资源的时候。防止人们添加可能意外绕过应用程序的安全性或其他方面的额外参数。

如果要向用户有权访问的现有资源添加操作(这似乎是一个),您只想按ID查找对象并使用它。因此,不是使用通过listing_params过滤的参数来找到它,而是在控制器中找到它:

def lead
  listing = Listing.find(params[:id])
  Enquiry.lead(listing).deliver
  redirect_to listing
end

使用简单的链接调用它,而不是:

<%= form_for lead_listing_path(@listing), method: :put do |listing| %>
  <%= listing.text_field :name %>
  <%= listing.submit %>
<% end %>

在您的视图中使用此功能:

= link_to 'Go!', lead_listing_path(@listing), method: :put

没有更多的东西。