我有一个rails 3.1应用程序,我可以创建邮件爆炸。我有一个包含邮件链接的所有爆炸清单,用于邮寄特定爆炸(使用ajax)。我在我的blasts控制器中有一个我想要使用的自定义动作。当我点击链接时,它想要调用show.js.coffee而不是mail.js.coffee。如何强制它使用我创建的动作。当我将所有内容都放在我的控制器和show.js.coffee的show动作中但不是邮件动作和mail.js.coffee等时,一切正常。
这是我的爆炸部分
<td><% if can? :create, Blast%><%= link_to "Mail",blast,:action => :mail :confirm => "Are you sure?",:remote => true%><%end%></td>
这是控制器中的方法
def mail
@customers = Customer.all
@mailcustomers = Customer.where(:opted_out => false)
@blast = Blast.find(params[:id])
end
这是在我的mail.js.coffee文件
中 <% @mailcustomers.each do |f|%>
<% BlastMailer.mail_blast(f,@blast).deliver %>
<%end%>
在routes.rb
中resources :blasts do
collection { post :mail }
end
答案 0 :(得分:0)
(编辑:在我原来的回答中,我对在.js.coffee
文件中使用ERB犹豫不决。但在进一步调查中,事实证明Rails 3.1允许在特殊情况下使用ERB为响应:remote => true
表单操作而提供JS的情况。)
我认为你的问题是
:action => :mail :confirm => "Are you sure?"
尝试在:mail
后添加逗号。
答案 1 :(得分:0)
我想出了我需要做的事情。这是有效的线。
<td>
<% if can? :create, Blast%>
<%= link_to "Mail", {:action => :mail, :id=>blast.id}, :method => :post,:confirm => "Are you sure?",:remote => true%>
<%end%>
</td>