Searchlogic:如何定义namedscope以便在关联模型上使用OR?

时间:2011-09-08 14:01:55

标签: ruby-on-rails searchlogic

所以,我发现了这个:Searchlogic OR condition results in undefined method

但这仅适用于您正在直接搜索的模型上的字段。 我有一个suscription模型,但我想搜索不同订阅的帐户名称或其他字段,例如。

从上面的链接(并修改)我希望能够做类似的事情:

  named_scope :account_name_full_domain_like, lambda{ |name|{
     :conditions => ["accounts.name LIKE ? OR accounts.full_domain LIKE ?", "%" + name + "%", "%" + name + "%"],
     :joins => "LEFT JOIN `accounts` ON `accounts`.id = `subscriptions`.account_id"
    }}

但是现在我收到了一个错误:

27:     <% form_for @search do |f| %>  

undefined method `subscription_subscription_path' for #<ActionView::Base:0x11061dbc0>

编辑: 弄清楚了: 我必须在我的调用中包含.search来分配@search var

@search = Subscription.search.account_name_full_domain_like(term)

1 个答案:

答案 0 :(得分:1)

如果您的指定范围在您的订阅模型上,您将返回订阅记录。你的病情和加入似乎是有效的。我不确定这个命名范围与您在视图中使用的实例变量@search的关系是什么。

您希望将此表单提交到“ subscription_subscription_path ”路径吗?如果是,请运行“rake routes”,并确保您有一个名为“subscription_subscription_path”的路径。

如果您想提交到备用路径,可以通过执行以下操作,在form_for中指定要提交的网址:

<% form_for @search, :url => subscription_path(@search) %>

有关指定form_for网址的详细信息,请访问:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for