GVKun编程网logo

Rails按关联字段排序(将关键字序列sun)

9

在这篇文章中,我们将带领您了解Rails按关联字段排序的全貌,包括将关键字序列sun的相关情况。同时,我们还将为您介绍有关Rails3ActiveRecord:按关联计数、Rails3ActiveRe

在这篇文章中,我们将带领您了解Rails按关联字段排序的全貌,包括将关键字序列sun的相关情况。同时,我们还将为您介绍有关Rails 3 ActiveRecord:按关联计数、Rails 3 ActiveRecord:顺序和按关联计数分组、ruby-on-rails – Rails 3 – 在隐藏表单字段中使用user.id与使用关联、ruby-on-rails – Rails 4多态关联和关注点的知识,以帮助您更好地理解这个主题。

本文目录一览:

Rails按关联字段排序(将关键字序列sun)

Rails按关联字段排序(将关键字序列sun)

我有以下型号

class User  attr_accesible :first_name, :phone_number  has_one :user_extensionendclass UserExtension  attr_accessible :company, :user_id  belongs_to :userend

我有包含所有用户的表。我需要按名字,电话号码,公司对该表进行排序。有了first_name,phone_number,我没有任何问题,例如,订单运作正常

@users = User.order("first_name desc")

,但我还需要按公司排序,而且不知道该怎么做。

这样我就可以得到公司名称

@user.user_extension.company

所以我在使用sql时遇到麻烦,这会给我公司订购的所有用户。DB:PostgreSQL。谢谢。

编辑:

我应该提供有关此模型的更多信息。

create_table "user_extensions", :force => true do |t|  t.integer  "user_id"  t.string   "company"endcreate_table "users", :force => true do |t|  t.string   "first_name"  t.string   "phone_number" end

另外,我尝试使用连接

User.joins(:user_extension).order("user_extension.company desc")

还有我得到的

 User Load (1.6ms)  SELECT "users".* FROM "users" INNER JOIN "user_extensions" ON "user_extensions"."user_id" = "users"."id" ORDER BY user_extension.company descPG::Error: ERROR:  relation "user_extensions" does not exist

User.includes(:user_extension).order("user_extension.company desc")

我也得到

PG::Error: ERROR:  relation "user_extensions" does not exist

解决 了我的bd的问题,所有连接均正常。

答案1

小编典典

试试这个:

@users = User.includes(:user_extension).order("user_extensions.company desc")

我认为您需要的是orderuser_extensions,而不是user_extension

Rails 3 ActiveRecord:按关联计数

Rails 3 ActiveRecord:按关联计数

我有一个名为的模型Song。我也有一个名为的模型Listen。A Listen belongs_to :song和一首歌:has_many listens(可以收听很多次)。

在我的模型中,我想定义一个方法self.top,该方法应返回收听次数最多的前5首歌曲。如何使用has_many关系实现这一目标?

我正在使用Rails 3.1。

谢谢!

Rails 3 ActiveRecord:顺序和按关联计数分组

Rails 3 ActiveRecord:顺序和按关联计数分组

给定模型所在的相同场景

Song has many :listens

我想按收听次数对歌曲进行分组。我的目标是查看歌曲与听音的分布情况。就像是…

song_listen_distribution = {0 => 24, 1 => 43, 2=>11, ... MAX_LISTENS => 1}

这样就song_listen_distribution[4]可以返回听过4次的歌曲数量。

上面链接问题的公认答案非常接近我,但是我无法按“ songs.listens_count”分组

    Song.select("songs.id, OTHER_ATTRS_YOU_NEED, count(listens.id) AS listens_count").    joins(:listens).    group("songs.listens_count").    order("listens_count DESC")

答案1

小编典典

您正在寻找的内容与标准ActiveRecord查询的映射并不理想。

您可以调用直接SQL来最有效地获取所需内容:

subquery = Song.joins(:listens).group(:id).select("songs.id, COUNT(*) as listen_count).to_sqlraw = Song.connection.select_rows("SELECT listen_count, COUNT(*) FROM (#{subquery}) t GROUP BY listen_count ORDER BY listen_count DESC")song_listen_distribution = Hash[raw]

另外,您可以使用ActiveRecord查找所有歌曲的计数,然后在ruby中建立发行字典:

song_listens = Song.joins(:listens).group(:id).countsong_listen_distribution = song_listens.group_by{|n| n.last}.    each_with_object({}){|(k, g), h| h[k] = g.size}

ruby-on-rails – Rails 3 – 在隐藏表单字段中使用user.id与使用关联

ruby-on-rails – Rails 3 – 在隐藏表单字段中使用user.id与使用关联

好的,目前我有一张表格
<div>
  <%= f.label :title %><br/>
  <%= f.text_field :title %><br/>
  <%= f.label :itunesurl %><br />
  <%= f.text_field :itunesurl %><br />
  <%= f.hidden_field :user_id,:value => current_user.id %>
</div>
<div>
  <%= f.submit %>
</div>

它将current_user.id传递给我的“app”模型的create方法,该方法在保存之前将其创建为:

@app = App.new(params[:app])

但是我有(伪代码)的关联

user has_many apps
apps belongs_to user

问题:在create方法中执行类似的操作是否更安全(因此表单不会被修改)?

@user = current_user
@app = @user.apps.create(params[:app])

如果是这样……我究竟将如何实际实现上面的代码(它在语法上不正确..只是伪)?

谢谢!

解决方法

是的,使用您建议的第二种方式是最好的方法
@user = current_user
@app = @user.apps.create(params[:app])

另外,请确保您保护自己免受大规模任务的影响,请阅读此http://stephensclafani.com/2010/01/04/ruby-on-rails-secure-mass-assignment/

ruby-on-rails – Rails 4多态关联和关注点

ruby-on-rails – Rails 4多态关联和关注点

我正在尝试将评估模型添加到我的Rails 4应用程序中.

我做了一个名为evaluation.rb的模型.它有:

class Evaluation < ActiveRecord::Base

  belongs_to :evaluator,:polymorphic => true
  belongs_to :evaluatable,:polymorphic => true

我也对评估者提出了关注并且可以评估为:

module Evaluator
    extend ActiveSupport::Concern

    included do 
        has_many :given_evaluations,as: :evaluator,dependent: :destroy,class_name: 'Evaluation'

    end
end

module Evaluatable
    extend ActiveSupport::Concern

    included do 
        has_many :received_evaluations,as: :evaluatable,class_name: 'Evaluation'
    end
end

我在用户模型中包含了每个问题:

class User < ActiveRecord::Base
   include Evaluator
   include Evaluatable

在我的展示页面中,我想展示特定用户的评估(从其他用户 – 他们是评估者)收到.

在我的节目中,我有:

<% Evaluation.find(params[:id]).evaluations.order('created_at DESC').each do |eval| %>
                                <div id="portfolioFiltering">
                                        <%= eval.remark %>
                                        <%= eval.personal_score %>
                                        <small><%= eval.created_at %></small>

在我的评估表中,我不确定如何指定评估的接收者.我已经制作了基本表格,但我不清楚如何将其与应该接受评估的用户联系起来.

<%= simple_form_for(@evaluation) do |f| %>
  <%= f.error_notification %>

  <div>
    <%= f.input :score,collection: 1..10,autofocus: true,:label => "How do you rate this experience (1 being did not meet expectations - 10 being met all expectations) ?" %>

    <%= f.input :remark,as: :text,:label => "Evaluate your project experience",:input_html => {:rows => 10}  %>

我的评估表有:

t.integer  "user_id"
    t.integer  "evaluatable_id"
    t.string   "evaluatable_type"
    t.integer  "overall_score"
    t.integer  "project_score"
    t.integer  "personal_score"
    t.text     "remark"
    t.boolean  "work_again?"
    t.boolean  "continue_project?"
    t.datetime "created_at",null: false
    t.datetime "updated_at",null: false
  end

  add_index "evaluations",["evaluatable_type","evaluatable_id"],name: "index_evaluations_on_evaluatable_type_and_evaluatable_id",unique: true,using: :btree

质询

如何设置节目页面以显示收到的用户评估?

如何调整表单以便将用户ID指定为应该接收评估的人?

解决方法

如何设置节目页面以显示收到的用户评估?

您的模型问题可以帮助您.在您的UsersController #show action中,只需添加以下内容即可:

@received_evaluations = @user.received_evaluations

然后你可以在你的节目模板中使用它:

<% @received_evaluations.each do |evaluation| %>
  // render some view stuff
<% end %>

或者使用collection rendering.

注意:当前在您视图中的Evaluation.find(…)应该放在控制器操作中,将它保留在视图中是不好的做法.

如何调整表单以便将用户ID指定为应该接收评估的人?

如果您已识别出可用作评估的用户,则可以在控制器操作或视图表单中进行设置,以防您在页面上有要评估的用户列表.

在控制器中:

@evaluation.evaluatable_id = user_to_evaluate.id
@evaluation.evaluatable_type = user_to_evaluate.class.to_s

或者这个更简单的陈述也应该这样做:

@evaluation.evaluatable = user_to_evaluate

同样,您应该能够以相同的方式设置评估程序:

@evaluation.evaluator = user_that_evaluates

在视图中:

<% @users_to_evaluate.each do |user| %>
  <%= simple_form_for(Evaluation.new) do |f| %>
    <%= f.error_notification %>

    <div>
      <%= f.input :score,:label => "How do you rate this experience (1 being did not meet expectations - 10 being met all expectations) ?" %>
      <%= f.input :remark,:input_html => {:rows => 10}  %>
      <%= f.hidden_field :evaluator_id,:value => current_user.id %>
      <%= f.hidden_field :evaluator_type,:value => current_user.class.to_s %>
      <%= f.hidden_field :evaluatable_id,:value => user.id %>
      <%= f.hidden_field :evaluatable_type,:value => user.class.to_s %>
    </div>
  <% end %>
<% end %>

关于Rails按关联字段排序将关键字序列sun的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Rails 3 ActiveRecord:按关联计数、Rails 3 ActiveRecord:顺序和按关联计数分组、ruby-on-rails – Rails 3 – 在隐藏表单字段中使用user.id与使用关联、ruby-on-rails – Rails 4多态关联和关注点的相关知识,请在本站寻找。

本文标签: