2017-07-03 78 views
1

我試圖用洗劫用下面的例子:Rails的洗劫尋找其他車型

用戶模型

has_many :books 
has_one :profile 

剖面模型

belongs_to :user 

Book模型

belongs_to :user 

用戶的資料有一個名爲name的字段。在books/index.html.erb,有一個用戶name列的表:

書籍/ index.html.erb

<td><%= book.user.profile.name %></td>

我如何可以通過用戶配置文件的名稱來搜索書籍?

+0

你可以先搜索配置文件模型,然後當搜索到對象時,你可以找到它的相應書籍,如profile = Profile.search然後書籍= []; profile.map {| OBJ |書籍<< obj.books} –

+0

@TusharPal謝謝您的回覆。你能用Markdown格式回答嗎?所以當我檢查時我會接受。 – floox

+0

謝謝我已經完成了 –

回答

0

搜索上剖面模型的第一再經過那麼當搜索對象,那麼你可以找到它的相應的書如

profile = Profile.search 
@books =[] 
profile.map{|obj| @books << obj.books} 

以上是在這裏你可以實現它的方式。

+0

在'index'操作中,有'@books = Book.all'。如何將'books = []'改成'@ books'。謝謝。 – floox

+0

編輯更改 –

0

我有同樣的問題之前,我的理解搜查只能搜索直接關係,而不能使用有許多經過,現在我合併洗劫搜索與聯接命令,下面

對你的情況是配置文件的示例代碼。 RB

scope :joins_user, lambda { |profile_name| 
    joins(user: :book).select('profiles.*','users.*','books.*'). 
    where("profiles.name = ? ", profile_name) 
} 
下面

在控制器樣品與 「手動搜索」

@search = Profile.all.join_user(params[:profile_name]).search(params[:q]) 
    合併搜查搜索0
  • Profile.all =返回所有輪廓
  • join_user(PARAMS [:PROFILE_NAME]將篩選僅基於PARAMS輪廓[:PROFILE_NAME]
  • 搜索(PARAMS [:Q]),這將合併的情況下,附加的搜查搜索你有多個過濾器,你可以刪除這個,如果你只有一個過濾器