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

时间:2015-01-23 09:38:12

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我刚刚开始使用设备。我根据说明设置了所有内容:1。在环境文件中定义默认URL选项,2。设置路由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

任何可能导致这种情况的想法?

2 个答案:

答案 0 :(得分:1)

我不知道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)是正确的

希望它能够结束!

答案 1 :(得分:0)

你有这行代码

@submit = current_user.Submit.new(submit_params)

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

你应该写

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