Rails 4 其中 select 全部
Rails 4 where select all
在Rails
中你是怎么做到的
在我看来,如果我 select 一个用户,那么我想显示该用户所属的所有类别,但问题是这是一个 table(旧版数据库),没有关系
我试过这样做,但没有用
where('user in ?', categories)
我刚刚得到ActiveRecord_Relation:0x007fb16f90abf0
table列是这样的
- 用户类别
- 用户 1 类别 1
- 用户 1 类别 2
- 用户 2 类别 2
- 用户 2 类别 4
您可以使用 direct sql query 到您的数据库。
以下是一个示例,您的查询将取决于您的架构:
result = ActiveRecord::Base.connection.execute("SELECT * FROM categories WHERE user_id = #{@user.id}")
result.to_a
更新
根据评论对话:
假设 #1:
- 遗留数据库,单一 table,无关系,单一模型 -> 假设 用户
- 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
在Rails
中你是怎么做到的在我看来,如果我 select 一个用户,那么我想显示该用户所属的所有类别,但问题是这是一个 table(旧版数据库),没有关系
我试过这样做,但没有用
where('user in ?', categories)
我刚刚得到ActiveRecord_Relation:0x007fb16f90abf0
table列是这样的
- 用户类别
- 用户 1 类别 1
- 用户 1 类别 2
- 用户 2 类别 2
- 用户 2 类别 4
您可以使用 direct sql query 到您的数据库。
以下是一个示例,您的查询将取决于您的架构:
result = ActiveRecord::Base.connection.execute("SELECT * FROM categories WHERE user_id = #{@user.id}")
result.to_a
更新
根据评论对话:
假设 #1:
- 遗留数据库,单一 table,无关系,单一模型 -> 假设 用户
- 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