簡體   English   中英

全選的Rails 4

[英]Rails 4 where select all

您如何在Rails中做到這一點

在我看來,如果我選擇一個用戶,那么我想顯示該用戶所在的所有類別,但是問題是這是一個表(傳統數據庫),沒有關系

我試圖做這樣的事情,但它不起作用

where('user in ?', categories)

我剛得到ActiveRecord_Relation:0x007fb16f90abf0

表格列是這樣的

  • 用戶類別
  • user1 category1
  • user1 category2
  • user2 category2
  • user2 category4

您可以使用直接SQL查詢到您的數據庫。

以下是一個示例,您的查詢將取決於您的架構:

result = ActiveRecord::Base.connection.execute("SELECT * FROM categories WHERE user_id = #{@user.id}")
result.to_a

更新

根據評論對話:

假設1

  1. 舊版數據庫,單個表,無關系,單個模型->假設用戶
  2. 用戶有兩個字符串字段:(1)user_full_name(2)類別

在這種情況下,我們可以這樣做:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM