【问题标题】:Undefined Method when using current_user from Devise使用 Devise 中的 current_user 时的未定义方法
【发布时间】:2015-01-24 15:41:26
【问题描述】:

我刚刚开始使用设备。我按照说明设置了所有内容: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

有什么可能导致这种情况的想法吗?

【问题讨论】:

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


    【解决方案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) 是正确的

    希望有帮助!

    【讨论】:

    • 感谢您的回答,感谢您的回答。连接是用户has_many :submits,提交belongs_to :user。根据您的建议,我摆脱了错误,但现在我面临以下错误:param is missing or the value is empty: submit 在以下代码中def submit_params params.require(:submit).permit(:title, :url) end 知道这可能是什么吗?我尝试将代码更改为require(:submits)already。再次感谢
    • 这样就完成了!非常感谢。你能解释一下为什么不应该将 submit_params 传递到 def new 中吗?我有一个教程中的代码以这种方式显示它......
    【解决方案2】:

    你有这行代码

    @submit = current_user.Submit.new(submit_params)
    

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

    你应该写

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      相关资源
      最近更新 更多