几天来,我一直在尝试解决以下问题。如果这是一个常见问题,请原谅我,因为我是 Rails 新手,可能无法在 stackoverflow 或 google 中查询正确的问题/关键字。
我正在构建一个系统,用户将通过电子邮件收到邀请,单击唯一链接,被带到他/她可以接受或拒绝邀请的页面。我被困在用户接受或拒绝邀请的部分。
我围绕两个控制器构建了它:邀请控制器和确认控制器。邀请控制器创建包含名称、电子邮件和唯一生成的令牌的记录。然后控制器将带有令牌的链接通过电子邮件发送到定义的电子邮件。该链接指向确认控制器并传递来自邀请的唯一令牌。但是,当单击链接并接受邀请时,我收到以下错误:
NoMethodError in ConfirmationController#confirm
undefined method `update_attribute' for nil:NilClass
以下是解决此问题的一些代码:
确认控制器.rb
class ConfirmationController < ApplicationController
def new
@confirmation = Invitation.find_by_invite_token(params[:invite_token])
end
def confirm
if @confirmation.update_attribute(:accepted, true)
flash[:success] = "Invitation confirmed!"
redirect_to 'static_pages/home'
else
flash[:notice] = "Failed :("
redirect_to 'static_pages/home'
end
end
end
路线.rb
match '/confirmation/:invite_token', to: 'confirmation#new'
match '/confirmation/:invite_token/confirm', to: 'confirmation#confirm'
app/views/confirmation/new.html.erb
Click here to accept:
<%= link_to "Confirm", :controller => "confirmation", :action => "confirm" %>