【发布时间】:2015-10-19 18:51:19
【问题描述】:
我试图在我的控制器中调用我在模型中创建的自定义方法,但是当我提交指向控制器操作的表单时,我收到以下错误:
#Rally:0x4c1fa90 的未定义方法 `add_manager'
def add_manager
if @rally.add_manager(manager_params)
format.html { redirect_to @rally, notice: 'Manager successfully added.' }
format.json { head :no_content }
else
这是我的代码中的内容
rally.rb
def self.add_manager(params)
user = User.where(:email => params[:email])
rally.users << user
end
rallies_controller.rb
def add_manager
if @rally.add_manager(manager_params)
format.html { redirect_to @rally, notice: 'Manager successfully added.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @rally.errors, status: :unprocessable_entity }
end
end
到目前为止我所做的测试:
- 检查@rally 是否设置:有效
- 已检查列出的可用方法:add_manager 未列出
- 在 Rails 控制台中测试了所有命令:有效
知道我做错了什么吗?
【问题讨论】:
-
在方法定义中使用 self 使其成为类方法。因此,Rally.add_manager 会起作用,但我怀疑这是你想要的。
-
@SrdjanPejic 我明白了。奇怪的是它仍然可以在 Rails 控制台中工作,但不能在控制器中工作。那么最好的解决方案是将其作为私有方法移动到控制器中吗?
-
不,只需从方法定义中删除 self 即可。另外,如果
user为零,您确定rally.users << user会失败吗?如果没有,您就是在进行不必要的检查。 -
@SrdjanPejic 成功了!谢谢您的帮助。至于支票,我还没有添加。只是想确保在添加其他位之前能够正确处理表单。
标签: ruby-on-rails ruby methods controller