如何在Rails中执行此操作
在我看来,如果我选择一个用户,那么我想显示用户所在的所有类别,但问题是这是一个单独的表(Legacy DB)没有关系
我曾尝试做过类似的事情,但它不起作用
where('user in ?', categories)
我得到ActiveRecord_Relation:0x007fb16f90abf0
表格列是这样的
答案 0 :(得分:0)
您可以将direct sql query用于数据库。
以下是一个示例,您的查询将取决于您的架构:
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
答案 1 :(得分:0)
我想显示用户所在的所有类别
@categories = User.where(id: params[:id]).pluck(:category)
这将返回集合数据,您可以使用.each
循环或其他某种recursion循环播放:
@categories.each do |category|
category #-> since this will be a single value, you don't need any attributes
end
-
#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
关系,通过许多,您可以 <{em> users
categories
,如下:
@user = User.find params[:id]
@categories = @user.categories
这也将返回集合的数据;不同之处在于,此实例中的categories
将根据与Category
关联的每个user
对象构建。
您可以按以下方式拨打电话:
@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