RoR:我如何只搜索具有特定属性的微博?

时间:2012-09-26 23:15:55

标签: ruby ruby-on-rails-3

现在在app / views / microposts / home.html.erb我有..

<% form_tag purchases_path, :method => 'get', :id => "products_search" do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

<% form_tag sales_path, :method => 'get', :id => "sales_search" do %>
      <p>
        <%= text_field_tag :search, params[:search] %>
        <%= submit_tag "Search", :name => nil %>
      </p>
    <% end %>

然后在micropost.rb中我有

scope :purchases, where(:kind => "purchase")
  scope :sales, where(:kind => "sale")

 def self.search(search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end

然后最后在microposts_controller.rb中我有

def home

    @microposts=Micropost.all
    @purchases=@microposts.purchases
    @sales=@microposts.sales

  end

现在我收到一个错误,说明未定义的局部变量或方法`purchases_path',它对sales_path也是如此。

我想要做的只是搜索一些微博而不是全部微博。在我的微博表中,我有一个名为kind的列,可以是“购买”或“销售”。如何更改这三段代码,以便一个搜索搜索并仅显示那些具有“购买”类型的微博的结果。然后另一个搜索并显示仅具有“销售”类型的微博的结果

这个问题(在另一篇文章中)在RoR: how can I search only microposts with a specific attribute?

有50个代表的赏金

1 个答案:

答案 0 :(得分:1)

你可以试试这个。

你的模特:

class Micropost
  # ...
  scope :purchase_only, where(:kind => "purchase")
  # ...
  def self.search(search)
    if search
      self.purchase_only.find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
    else
      self.purchase_only
    end
  end
end

但是,这些东西对我来说很奇怪。

例如:你应该删除.find(...),这个查找器将不推荐使用Rails 4。