我尝试使用以下代码创建邮件程序:
路线代码
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
我该如何解决这个问题?如果我是诚实的话,我是初学者,可以帮助这个邮件工作!谢谢。
答案 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
没有更多的东西。