我觉得我在两种情况下都缺少一些相当重要的东西,但我似乎无法想出来:
1)我有一个名为TestCase的模型 -
class TestCase < ActiveRecord::Base
belongs_to :test_suite
scope :queued, lambda { where("test_cases.suite_id IS NOT NULL") }
scope :assigned_to, lambda { |sid| where(:suite_id => sid) }
end
控制器可以完美地与它进行交互。当尝试在视图中或通过视图助手(例如TestCase.all
)显示信息时,我得到NoMethodError (undefined method 'all')
如果我用::TestCase.all
调用它,那就有效。我有一个理论认为它与另一个模型(belongs_to ......)相关联,我找不到任何东西来确认或者告诉我为什么会发生这种情况。
2)在另一个项目中,我还有另一个名为Artwork的模型。同样,它有关联(belongs_to)。在这种情况下,我可以在视图中正确访问它,并且其中的所有方法都适用于控制器,除非我尝试进行动态方法调用。在这种情况下,我有一个简单的切换 -
@artwork = Artwork.find(params[:id])
value = params[:value].to_sym
@artwork.update_attributes(value => !@artwork.method(value).call)
这给了我一个NoMethodError
。但是,如果我添加 - if @artwork.respond_to?(value)
- 那么它会按预期工作。再一次,我无法弄清楚为什么。
我使用上述方法开始工作的两个项目,但同样,我觉得我真的错过了一些重要的东西。
答案 0 :(得分:0)
Re:问题1 - 不要将您的模型称为“TestCase”。这与Rails TestCase
类冲突。
回复:问题2 - 这是一种奇怪的做事方式。您可以使用
使其正常工作@artwork.send(value)
但请记住,流氓用户可以通过表单传递任何方法名称并造成严重破坏。