Rails,更新邀请系统的记录

问题描述:

我想让用户接受邀请,接受标记位于邀请模型本身中(所以我需要更新表)。当用户点击接受按钮Rails,更新邀请系统的记录

查看

<% @invites.where(user_id: current_user.id).find_each do |invite| %> 
... 
<%= button_to "Accept", accept_invite_invites_path(invite), method: :put %> 
end 

路线

resources :invites do 
    collection do 
     get 'accept_invite' 
    end 
    end 

控制器

def accept_invite 

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

def decline_invite 
    @invite = Invite.find(params[:id]) 
    @invite.decline 
end 

    def set_invites 
     @invite = @story.invites.find(params[:id]) 
    end 

def new 
    @invite = @story.invites.new 
end 

我得到“未定义的方法'邀请的零发生至今没有: NilClass“如果我保持:更新作为set_invites的一部分,删除更新允许我的代码运行,但没有ch到数据库的时代已经到来。

型号

def accept 
    accept = true 
    save 

    end 

    def decline 
    accept = false 
    save 

    end 

控制台

Processing by InvitesController#update as 
    Parameters: {"authenticity_token"=>"BDle9fqXHT9ZFctMbO4RvxfPuTQXe2Nq+b6/T29B3xjpYdtMozVUFLiRlaQFtuYzMrBceTQn8OtfGjJTe4wa/Q==", "id"=>"accept_invite"} 
    User Load (1.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1 
No template found for InvitesController#update, rendering head :no_content 
Completed 204 No Content in 85ms (ActiveRecord: 1.7ms) 

因为数据库是从用户表中选择,而不是更新的邀请表

那么问题是什么这很奇怪?路线是否有缺陷?我的set_invites方法?

那么是什么问题?路线是否有缺陷?我的set_invites方法?

是的,你路由故障。正如我所看到的,您在集合上宣布了您的路线,但您需要它在成员。还应该将其更改为put

resources :invites do 
    member do 
    put 'accept_invite' 
    end 
end 
+0

还是什么都没有,没有发生变化,控制台输出相同的,它从用户表中进行选择,而不是更新的邀请表 –

+0

它现在从邀请表中选择,但随后跑入“中找不到模板InvitesController#accept_invite“错误 –

+0

我解决了模板问题,但表中仍然没有更新。 –