Ruby on rails 将参数传递到帮助程序的参数数目错误(给定0,应为1)

Ruby on rails 将参数传递到帮助程序的参数数目错误(给定0,应为1),ruby-on-rails,parameters,helper,Ruby On Rails,Parameters,Helper,用户需要单击按钮来接受或拒绝他们收到的邀请。我创建了这个helper方法,假设它找到用户的invite,然后将其accept boolean设置为1。但我得到了“错误数量的参数(给定0,预期为1)” 观点: module ProfilesHelper def accept (invites) invite=invites.find(id: '1') invite.accept= '1' invite.save end end 如何将invite对象传递给ac

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

观点:

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


如何将invite对象传递给accept助手?

我认为您误解了助手的用途。按照您使用此代码的方式,在查看页面时,而不是单击链接时,将接受邀请

助手会帮助您布置页面。或者通过从视图中抽象逻辑,装饰事物,将数字格式化为货币,或者其他一百万件事情。它们不是用来处理请求的

您不应该使用标准的
GET
请求(锚定标记)来更改数据集。它们应该通过
PUT
PATCH
POST
DELETE
请求发送

这里您需要的是使用
按钮
元素,或者使用
放置
补丁
动词更改链接以提交请求。然后,使用合适的路由接收接受邀请的请求,向控制器添加操作以处理此请求

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

<% @invites.each do |invite| %>
  <%= link_to "Accept", accept(invite) %> 
<% end %>
这允许您将处理该接受的业务逻辑移动到模型中:

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

这样,您的控制器可能只需要处理请求,而模型可能需要处理实际接受邀请的问题。

您确定错误在那一行吗?您还将一个
invite
传递给帮助器,然后调用一个方法,因为它是一个数组或一个有意义的activerecord Relations,如何确保只从方法中调用一个invite?我删除了invite=invites.find(id:'1')行,作为只修改一个条目的一种方式,但如果您遇到错误或其他问题,它不会起作用?您还必须将方法参数更改为just
invite
我刚刚意识到我的实现中有一个重大错误,我现在正在更改它,从视图中调用它的语法是什么?类似于
。您需要使用处理接受请求的控制器操作的路径。好的,它似乎获得了正确的invite,但我得到了“No route matches[POST]”,我的路由是“resources:accept\u invite”,检查rails路由accept\u invite是否有放置请求(No POST)然后,您需要告诉
按钮\u使用什么
:方法。检查文档,它应该沿着
按钮到'Label',操作路径,方法::put
class Invite
  def accept!
    accept = true
    save
    # You might want to do other things here, like email them a confirmation etc.
  end
end