使用 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
知道是什么原因造成的吗?
不知道User
和Submit
有什么关系,所以
如果用户有很多提交则将current_user.Submit.new
更改为
current_user.submits.new
否则如果用户有一个提交
current_user.build_submit
现在在您的 new
和 create
操作中使用上述更改
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
我刚开始使用设备。我根据说明设置了所有内容: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
知道是什么原因造成的吗?
不知道User
和Submit
有什么关系,所以
如果用户有很多提交则将current_user.Submit.new
更改为
current_user.submits.new
否则如果用户有一个提交
current_user.build_submit
现在在您的 new
和 create
操作中使用上述更改
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