[英]How to pull information from associated model (Rails)
我正在使用Ransack gem運行搜索。
控制器代碼(用於ItemsController)
@q = Item.search(params[:q])
@search_results = @q.result
運行搜索后, @search_results
包含多個Items
(項目1,項目2,項目3等)。 每個項目都是哈希值:
Item = { "id" => "12", "name" => "shovel", "user_id" => "2", "type" => "A" }
在這種情況下,對於每個Item哈希,我想添加一個附加的鍵-值對,該對將user_id
轉換為與User
模型的該實例相關聯的名稱(即, User has_many :Items
和Item belongs_to :Users
)
我在同一控制器代碼部分中嘗試過
@search_results.each do |item|
item[:user_name] = User.find_by_id(item.user_id).name
end
但是我收到一個我無法寫到項目的錯誤。 我懷疑Ransack與此有關,因為如果我只打印@search_results
,而不是獲取實際的Item數據, @search_results
得到#<ActiveRecord::Relation::ActiveRecord_Relation_Item:0x000001025e6c78>
幫助極大的贊賞!
順便說一句,如果有更簡單的方法,我想用user_name添加另一個鍵/值對的原因是因為最終輸出是JSON,而該JSON已被代碼庫的另一部分拾取,我們不希望運行兩個單獨的數據庫查詢。
首先,您將收到一個紅寶石對象,這意味着您可以在模型中創建一組屬性。 為什么不嘗試在item
模型中使用吸氣劑為您設置:
#app/models/item.rb
Class Item < ActiveRecord::Base
belongs_to :user #-> needs to be singular
attr_accessor :user_name
def user_name
self.user.name
end
end
這意味着不必從控制器中添加user_name
屬性,而是每個Item
對象將自動具有user_name
屬性
對此的重構也將是在Item
模型中使用delegate
方法 :
Class Item < ActiveRecord::Base
belongs_to :user
delegate :name, to: :user, prefix: true #-> allows you to call @item.user_name
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.