使用 Devise 中的 current_user 时未定义的方法

Undefined Method when using current_user from Devise

我刚开始使用设备。我根据说明设置了所有内容:1. 在您的环境文件中定义了默认 url 选项,2.Set 路由 3. 插入了 flash 消息 4. 生成了视图和用户模型。

注册/登录等工作正常,但是当使用我的控制器内部设计的 current_user 助手时,像这样 (submissions_controller.rb):

   ...
   before_filter :authenticate_user!, :except => [:index, :show]
   ...

  def new
    @submit = current_user.Submit.new
    respond_with(@submit)
  end



  def create
    @submit = current_user.Submit.new(submit_params)
    @submit.save
    respond_with(@submit)
  end

我收到以下错误:

NoMethodError in SubmitsController#new
undefined method `Submit' for #<User:0x007fea99a46f38>

Extracted source (around line #18):

  def new
    @submit = current_user.Submit.new
    respond_with(@submit)
  end

知道是什么原因造成的吗?

不知道UserSubmit有什么关系,所以

如果用户有很多提交则将current_user.Submit.new更改为

current_user.submits.new

否则如果用户有一个提交

current_user.build_submit

现在在您的 newcreate 操作中使用上述更改

def new
  @submit = current_user.submits.new
  respond_with(@submit)
end

def create
  @submit = current_user.submits.new(submit_params)
  @submit.save
  respond_with(@submit)
end

你的 submit_params 应该看起来像

def submit_params 
  params.require(:submit).permit(:title, :url) 
end

require(:submit) 正确

希望对你有帮助!

你有这行代码

@submit = current_user.Submit.new(submit_params)

这里失败了,因为你在 user 对象上调用 Submit 方法,而你没有 Submit 方法。通过查看您的代码,我发现您想要创建新的 Submit.

你应该写

@submit = Submit.new(submit_params) # instantiate new Submit object