Tag: has many

如何通过has_many评论关系显示评分最高的专辑

我正在设置一个简单的ruby / rails应用程序,用户可以在其中查看相册。 在相册的展示页面上,我通过相册控制器中的此代码平均与该相册相关联的所有用户评论 def show @album = Album.find_by_id(params[:id]) if @album.reviews.present? @ratings = Review.where(album_id: @album).average(:rating).truncate(2) else render ‘show’ end end 这给了我每张专辑的平均评分。 在我的主页上(通过不同的控制器路由)我想显示平均评分最高的前7张专辑。 我最初做的是将此代码放入单独的主页控制器: @albums = Album.all @ratings = @albums.each {|album| album.reviews.average(:rating).to_f} @ranked_ratings = @ratings.sort_by {|rating| rating} @top_seven = @ranked_ratings.reverse[0…7] 我以为我找到了解决方案,直到我意识到我所展示的是最后输入数据库的7张专辑。 回到绘图板我已经能够获得所有相册的数组(数组中的每个元素都是与该相册相关的评论列表),在我的控制器中使用此代码: @albums = Album.all @ratings = @albums.collect {|album| album.reviews} 我一直在试图找出如何循环@ratings并找到每个album_id的平均评分,然后按照最高平均评分对这些记录进行排序并在视图中显示。

如果Record具有Array中的任何ID,则选择所有记录

早安溢出。 我在尝试选择所有具有存储在名为@problem的数组中的ID的处理时@problem 。 这是我的治疗控制器。 @problem = Remedy.find_by_sql([“SELECT id FROM remedies WHERE LOWER(\”remedyName\”) LIKE?”, “%#{params[:searchremedy]}%”.downcase]) query = “SELECT * FROM treatments INNER JOIN remedies_treatments on treatments.id = remedies_treatments.treatment_id WHERE remedies_treatments.treatment_id LIKE ?” @pretreatments = Treatment.find_by_sql([query, @problem]) 这是控制台的错误 ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax error at or near “,” LINE 1: …d WHERE remedies_treatments.treatment_id LIKE 233,234,224 “LIKE”运算符可能不是我想要做的事情 – 我尝试使用ANY运算符,但也无济于事。 […]

为新的,编辑更新和创建操作加载其他模型集合的rails方式是什么?

如何在新的,编辑更新和创建操作中为ProductController加载Category模型的最佳方式 产品有类别集合 class Product < ActiveRecord::Base has_many :categories end 始终用于新建,编辑,创建和更新操作,我需要加载类别集合以填充check_box_tag列表 这种情况的“婴儿步骤”是: class Admin::ProductsController < Admin::AdminApplicationController def new @product = Product.new @categories = Category.all end def edit @product = Product.find(params[:id]) @categories = Category.all end def create @product = Product.new(params[:product]) if @product.save flash[:notice] = 'Product was successfully created' redirect_to edit_admin_product_path(@product) else @categories = Category.all render :new end […]

Rails:非id外键查找ActiveRecord

我希望ActiveRecord通过表中的非id列进行查找。 当我向你提供我的代码示例时,希望这很清楚。 class CoachClass < ActiveRecord::Base belongs_to :coach end class Coach ‘user_name’ end 当我做一个coach_obj.coach_classes ,这正确地触发了 SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 2) (2是教练的id ,这是我的问题。) 我想让它触发 SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = ‘David’) (’David’是那个教练的user_name ) user_name是唯一的,并且存在于两个表中。 出于某种原因,我不希望在coach_classes表中有一个coach_id 。

限制has_many中返回的对象数

如何限制多个关系中返回的行数? 例如: class User < ActiveRecord::Base has_many :photos end 我希望能够做到: User.includes(:photos => {:limit => 8}).all 这显然不起作用,但具有此function的东西。 我是否需要自己编写SQL? 提前致谢! 编辑:我不想限制关联,只是查询结果。 所以一个用户可能有一千张照片,我只想要返回前三名。

ror – 在has_many和belongs_to的两端包含外键?

我inheritance的代码有: class Graphic ‘asset_id’, :conditions => ‘asset_type_id = 5’, :order => ‘created_at’, :dependent => :destroy class Comment :asset_id 在我看来,像has_many不应该有foreign_key(它在belongs_to中被引用,我相信)但我不确定,你知道吗? 也就是说 class Graphic ‘asset_type_id = 5’, :order => ‘created_at’, :dependent => :destroy class Comment :asset_id

ActiveRecord has_many其中表A中的两列是表B中的主键

我有一个模型, Couple ,它有两列, first_person_id和second_person_id ,另一个模型是Person ,其主键是person_id并且具有列name 这是我想要的用法: #including ‘Person’ model for eager loading, this is crucial for me c = Couple.find(:all, :include => :persons)[0] puts “#{c.first_person.name} and #{c.second_person.name}” 那我该怎么做呢?

如何避免has_many:through关系中的重复?

我怎样才能实现以下目标? 我有两个模型(博客和读者)和一个JOIN表,它允许我在它们之间建立N:M关系: class Blog :destroy has_many :readers, :through => :blogs_readers end class Reader :destroy has_many :blogs, :through => :blogs_readers end class BlogsReaders < ActiveRecord::Base belongs_to :blog belongs_to :reader end 我现在想做的是将读者添加到不同的博客中。 但是,条件是我只能将博客添加到博客中。 因此, BlogsReaders表中不得有任何重复项(相同的readerID ,相同的blogID )。 我怎样才能做到这一点? 第二个问题是,如何获得读者尚未订阅的博客列表(例如,填写下拉选择列表,然后可以将读者添加到另一个博客)?