错误的参数数量(给定0,预期为1)将参数传递给帮助器

时间:2017-05-09 06:53:09

标签: ruby-on-rails parameters helper

module ProfilesHelper
  def accept (invites)
    invite=invites.find(id: '1')
    invite.accept= '1'
    invite.save
  end
end

用户需要单击按钮才能接受或拒绝他们收到的邀请。我创建了这个帮助方法,它假设找到用户的邀请,然后将它的接受布尔值设置为1.但我得到“错误的参数数量(给定0,预期1)”

查看:

<% @invites.each do |invite| %>
  <%= link_to "Accept", accept(invite) %> 
<% end %>

如何将邀请对象传递给接受助手?

1 个答案:

答案 0 :(得分:0)

我认为你误解了帮助者的目的。根据您使用此代码的方式,在查看页面时将接受邀请,而不是在单击链接时接受邀请。

帮助您帮助您布置页面。通过从视图中抽象出逻辑,装饰东西,将数字格式化为货币或其他一百万种东西。它们不是用于处理请求。

您不应该使用标准GET请求(锚标记)来更改数据集。它们应来自PUTPATCHPOSTDELETE个请求。

您需要使用button元素,或使用PUTPATCH动词更改链接以提交请求。然后,使用合适的路由接收接受邀请的请求,向控制器添加操作以处理此请求。

然后在您的控制器中,您可以执行以下操作:

def accept_invite
  @invite = Invite.find(params[:id])
  @invite.accept!
end

这使您可以将处理该接受的业务逻辑移动到模型中:

class Invite
  def accept!
    accept = true
    save
    # You might want to do other things here, like email them a confirmation etc.
  end
end

这样,您的控制器可以担心只是处理请求,模型可能会担心如何处理实际接受邀请。