Rails 4 其中 select 全部

Rails 4 where select all

在Rails

中你是怎么做到的

在我看来,如果我 select 一个用户,那么我想显示该用户所属的所有类别,但问题是这是一个 table(旧版数据库),没有关系

我试过这样做,但没有用

where('user in ?', categories)

我刚刚得到ActiveRecord_Relation:0x007fb16f90abf0

table列是这样的

您可以使用 direct sql query 到您的数据库。

以下是一个示例,您的查询将取决于您的架构:

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

更新

根据评论对话:

假设 #1:

  1. 遗留数据库,单一 table,无关系,单一模型 -> 假设 用户
  2. User 有两个字符串字段:(1) user_full_name (2) category

在那种情况下我们可以这样做:

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

I want to show all the categories the user is in

@categories = User.where(id: params[:id]).pluck(:category)

这将 return 一个 集合 数据,您可以使用 .each loop or some other sort of recursion:

循环遍历这些数据
@categories.each do |category|
   category #-> since this will be a single value, you don't need any attributes
end

--

应该做的是使用ActiveRecord association:

#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

这也会return一个集合数据;不同之处在于,此实例中的 categories 将从 user 关联的每个 Category 对象构建。

您可以这样称呼他们:

@user.categories.each do |category|
   category.name
end

要设置这个,你只需要设置 join table (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