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 %>
如何将邀请对象传递给接受助手?
答案 0 :(得分:0)
我认为你误解了帮助者的目的。根据您使用此代码的方式,在查看页面时将接受邀请,而不是在单击链接时接受邀请。
帮助您帮助您布置页面。通过从视图中抽象出逻辑,装饰东西,将数字格式化为货币或其他一百万种东西。它们不是用于处理请求。
您不应该使用标准GET
请求(锚标记)来更改数据集。它们应来自PUT
,PATCH
,POST
,DELETE
个请求。
您需要使用button
元素,或使用PUT
或PATCH
动词更改链接以提交请求。然后,使用合适的路由接收接受邀请的请求,向控制器添加操作以处理此请求。
然后在您的控制器中,您可以执行以下操作:
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
这样,您的控制器可以担心只是处理请求,模型可能会担心如何处理实际接受邀请。