奇怪且不一致的模型问题

时间:2010-11-22 22:49:07

标签: ruby-on-rails

我觉得我在两种情况下都缺少一些相当重要的东西,但我似乎无法想出来:

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) - 那么它会按预期工作。再一次,我无法弄清楚为什么。

我使用上述方法开始工作的两个项目,但同样,我觉得我真的错过了一些重要的东西。

1 个答案:

答案 0 :(得分:0)

Re:问题1 - 不要将您的模型称为“TestCase”。这与Rails TestCase类冲突。

回复:问题2 - 这是一种奇怪的做事方式。您可以使用

使其正常工作
@artwork.send(value)

但请记住,流氓用户可以通过表单传递任何方法名称并造成严重破坏。