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
还是什么都没有,没有发生变化,控制台输出相同的,它从用户表中进行选择,而不是更新的邀请表 –
它现在从邀请表中选择,但随后跑入“中找不到模板InvitesController#accept_invite“错误 –
我解决了模板问题,但表中仍然没有更新。 –