2017-09-01 21 views
0

我的方法是在更新属性的值时使用link_to错误,或者在我的语法中出现简单的问题吗?关于如何解决这个问题的任何想法?param丢失或值为空错误修补程序link_to

我尝试使用link_to更新单个属性时发生错误。我有我的看法如下代码:

<%=link_to "Pay", event_attendee_path(event_attendee, :paid => true), :method => :patch%> 

我使用的是循环内的link_to:<% @event_attendees.each do |event_attendee| %><%end%>

我得到的错误:“参数丢失或为空值:event_attendee”当我尝试运行我的代码。

我在我的控制器中的以下内容:

def event_attendee_params 
    params.require(:event_attendee).permit(:attendee_id, :event_id, :paid) 
end 

耙路线:

event_attendee GET /event_attendees/:id(.:format)  event_attendees#show 
        PATCH /event_attendees/:id(.:format)  event_attendees#update 
        PUT /event_attendees/:id(.:format)  event_attendees#update 
        DELETE /event_attendees/:id(.:format)  event_attendees#destroy 

回答

1

的问题是,当你通过一个模型的路线作为你已经完成了发送给服务器的唯一事情是模型的ID。在服务器中它是params [:id]。

在你的控制器中,你需要params有一个名为event_atendee的键,但实际上你发送的唯一东西是id。

在修补程序路径中,您通常需要使用id来获取要更新的对象,所以到目前为止都是如此。但是,您可能还想更新其他值?所以我会看看如何使用补丁方法在link_to中发送表单数据的文档。

一种方法是在路线中包含密钥,但可能有更好的方法。

+0

我明白了。谢谢,这帮助我理解了如何解决我的问题。 – Acrux

+0

@Acrux如果回答你的问题,你应该将答案标记为答案! :-) – andy

0

应该

params.require(:id).permit(:attendee_id, :event_id, :paid) 

您需要:event_attendee但路线解析它,并将它作为:id

0

你可以在你的控制器使用

@event_attendee.update(paid: params[:paid]) 

,或者在视图中使用

form_for(@event_attendee) 

,如果你想使用permit_params

相关问题