[英]Rails 4 where select all
您如何在Rails中做到這一點
在我看來,如果我選擇一個用戶,那么我想顯示該用戶所在的所有類別,但是問題是這是一個表(傳統數據庫),沒有關系
我試圖做這樣的事情,但它不起作用
where('user in ?', categories)
我剛得到ActiveRecord_Relation:0x007fb16f90abf0
表格列是這樣的
您可以使用直接SQL查詢到您的數據庫。
以下是一個示例,您的查詢將取決於您的架構:
result = ActiveRecord::Base.connection.execute("SELECT * FROM categories WHERE user_id = #{@user.id}")
result.to_a
根據評論對話:
假設1 :
在這種情況下,我們可以這樣做:
User.where(:user_full_name => @user.user_full_name).pluck(:category).flat.uniq
除此以外,
假設2 :
不知何故,您在此數據庫中沒有模型,我們回到了直接sql。
sql = "SELECT category FROM TABLE_NAME WHERE user_full_name = #{user_full_name}"
result = ActiveRecord::Base.connection.execute(sql)
result.to_a.flat.uniq
我想顯示用戶所在的所有類別
@categories = User.where(id: params[:id]).pluck(:category)
這將返回一個數據集合 ,您可以使用.each
循環或其他某種遞歸循環遍歷這些數據:
@categories.each do |category|
category #-> since this will be a single value, you don't need any attributes
end
-
您應該做的是使用ActiveRecord關聯 :
#app/models/user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :categories
end
#app/models/category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :users
end
這是一個has_and_belongs_to_many
關系,它將使您能夠將許多 users
與許多 categories
相關聯 ,如下所示:
@user = User.find params[:id]
@categories = @user.categories
這也將返回數據集合 ; 區別在於,此實例中的categories
將根據與user
關聯的每個Category
對象構建。
您可以按以下方式調用它們:
@user.categories.each do |category|
category.name
end
要進行設置,您只需要設置聯接表 ( categories_users
):
$ rails g migration CreateCategoriesUsers
#db/migrate/create_categories_users_____.rb
class CreateCategoriesUsers < ActiveRecord::Migration
def change
create_table :categories_users, id: false do |t|
t.references :user
t.references :category
end
end
end
$ rake db:migrate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.