Tag: rails activerecord

如何使用ActiveRecord访问Postgres列的默认值?

我正在尝试访问Postgres 9.2数据库中列的默认值。 通过使用原始SQL,我可以validation列默认为“users_next_id()”: > db = ActiveRecord::Base.connection > db.execute(“SELECT table_name,column_name,column_default FROM information_schema.columns WHERE table_name = ‘users’ and column_name =’id'”).first => {“table_name”=>”users”, “column_name”=>”id”, “column_default”=>”users_next_id()”} 但是当我使用AR的’columns’方法时,默认值似乎是nil: [26] pry(main)> db.columns(‘users’)[0]=> # 这不会导致任何问题(除了让我困惑),但这是预期的行为吗? 我是否对“列”方法做出了错误的假设?

对于#<ActiveRecord :: ConnectionAdapters :: MysqlAdapter,未定义的方法`explain'

我是Ruby on Rails的新手,但我已经学过一些教程,并且知道我的方法。 我已经生成了一些脚手架并将数据插入到MySql数据库中。 导航到index.html.erb时,我收到标题中的错误 控制器正在执行索引 def index @beers = Beer.all respond_to do |format| format.html # index.html.erb format.json { render :json => @beers } end end 并将此作为一种结构 Beer: id, brewer_id, name, price, score, color, brew_type, create_at, updated_at RoR正在为我创建的其他脚手架工作,并列出数据。 我更新了实体Beer的mysql结构,它可能没有反映rails的变化(dunno)。 我是否需要一个不同的gem来将rails连接到mysql db? 任何关于检查什么的建议都将受到赞赏(:

Rails按记录关联查询

我对Rails相对较新,并且想要了解更多我正在尝试构建一个简单的博客。 我正在进行的一个问题是标记。 我有一个Tag模型,我用它来创建和管理可以应用于post的标签。 我也有一个Post模型。 我需要能够将任何标签与post相关联,检索它们以获得输出,并能够通过特定标签过滤/查询post。 到目前为止,我已经在Post上创建了一个名为tags的列,它被分配了一个Tag ID数组,然后被序列化。 这非常适合检索,但我的理解是,尝试通过序列化列查询记录是一个很大的禁忌 。 正如上面的链接建议,我已经这样做以实现我的filter: Post.all.select { |post| post.tags.include? 3 } 但我知道这是收集我的所有post,然后使用数组方法select过滤它们。 我的问题是:如何将任意数量的Tag记录与Post记录关联,并按给定标记查询/过滤post记录?

Rails 4,使用Model.where(related_model_id:1)检索了许多记录,如何在单个视图中显示每个记录?

好的,所以我正在进行测验,作为我的应用程序的一部分。 我有三个嵌套模型测验,问题,答案。 class Quiz lambda { |a| a[:content].blank? }, allow_destroy: true end class Question lambda { |a| a[:content].blank? }, allow_destroy: true end class Answer < ActiveRecord::Base belongs_to :question end 在控制器动作测验中#show我可以检索特定测验的所有问题 def show @quiz = Quiz.find(params[:id]) @question = Question.where(quiz_id: @quiz) end 我可以在quizzes / show.html.haml视图中显示每个问题 – @question.each do |question| = question.content 问题是上面的代码会在同一页面上显示所有问题。 我真正想要的是在每个问题中单独显示每个问题,每页一个问题。 因此,一旦用户回答了一个问题,他们就会点击一个按钮,它将使用下一个问题重新呈现视图。 无论如何,我有一段时间试图弄清楚如何做到这一点。 先感谢您! 哦,如果您需要查看我的代码,请告诉我!

Rails 4活动记录validation – 如果存在至少一个属性而有条件地validation4个属性的存在,同时不允许存在

我有一个包含10个属性的表单。 其中我有4个属性,我需要应用我称之为“互为条件存在”的Active Recordvalidation。 我要那个 (A)如果至少存在一个,则必须存在另外3个 (B)仍然不允许存在(如果其他3为空白,则第四个有空白) 以下是四个属性: 地址第一行 邮政编码 州 国家 这意味着如果用户填写其中一个,那么所有其他人必须在场。 但如果一切都是空白的,那没关系。 到目前为止,我只能设法强制执行(A)。 但我未能实施(B)。 实际上,当我尝试在4个属性validation中的一个上使用allow_blank:true时,它会中断(A),因为在此之后,它不能确保如果存在属性,则其他属性也必须如此。 这该怎么做? 这是我目前的代码 规格/型号/用户 validates :address_line_1, presence: true, if: :pa_subelements_mutual_presence? length: { maximum: 100, minimum: 3 } validates :zipcode, presence: true, if: :pa_subelements_mutual_presence?, length: { maximum: 20, minimum: 4} validates :state, presence: true, if: :pa_subelements_mutual_presence?, validates :country, presence: true, if: […]

使用activerecord发出请求,仅从组中获取用户,而不从其他用户获取

我正在尝试从少数组中获取用户(使用给定的ID)并从其他组中排除用户。 我尝试过类似的东西: User.joins(:groups).where(groups: {id: [“8939″,”8950”]}).where.not(groups: {id: 8942}).map(&:id) User Load (0.9ms) SELECT “users”.* FROM “users” INNER JOIN “groups_users” ON “groups_users”.”user_id” = “users”.”id” INNER JOIN “groups” ON “groups”.”id” = “groups_users”.”group_id” WHERE “groups”.”id” IN (8939, 8950) AND “groups”.”id” != $1 [[“id”, 8942]] => [119491, 119489, 119490, 119492, 119488, 119484, 119483, 119491, 119482] 但这不正确 8942组中的用户。 Group.find(8942).users.pluck(:id) Group Load (0.4ms) […]

Rails Active Record Query仅加入,任何

Student has_many :enrollments 通过此查询,我看到那些具有true注册的学生,以及同时具有false注册的学生: @students = Student.joins(:enrollments).where(enrollments: { is_active: false }) 是否有一些“仅”属性我可以添加以查看只有活跃注册的学生?

Rails :: ActiveRecord在深拷贝副本中保留auto_increment id

我需要创建一个包含要操作的模型对象的临时数组。 我需要auto_increment主键,但我不希望保持关联,因为当我从数组中删除它时,它也将它从数据库中删除(感谢rails,非常不方便)。 我使用object.dup创建的深层副本的id标记为nil。 如何将它们保存在副本中?

ActiveRecord查询关联模型Rails 3

我在rails中有三个模型,Project(date,has_many:project_savings),Usage(month,amount,has_many:project_savings)和MonthlyProjectSaving(amount,belongs_to:usages,:projects)。 它的设置使每个项目都有一些节省,这些节省相当于几个月的使用时间。 我试图找到所有具有相应project.date > = usage.month的项目节省,并且尽可能以最安全的方式使用usage.amount == 0 。 usage.month和project.date都是日期类型。 下面基本上是我想要的,但我已经尝试了很多方法,但无法正确理解语法。 在我的项目展示视图中: s = @project.monthly_project_savings s.where(s.usage.month >= @project.date).where(s.amount: 0) 我更喜欢一种不会让SQL注入开放的解决方案。 干杯!

在模式中的两条路径上导航关系

从上到下,我的表之间有belongs_to关系,而另一方面则有has_many。 ReportTarget Report Manager Organization 和 Score Manager Organization 所以请注意, Report表和Score表是同一级别的。 他们都有Manager表作为他们的父母。 单独地,我可以弄清楚如何通过急切加载来导航它们。 首先,我会做: @blah = Organization.includes(managers: { reports: :report_targets }).find(params[:id]) 而对于第二个,我可以这样做: @blah = Organization.includes([managers: :scores]).find(params[:id]) 但是因为我在我的控制器中做了并且想要将JSON传递给JBuilder,我不知道如何传递它们? 或者将它们组合在一起? 这样产生的散列会将它们放在一个散列中,但使用单独的键: { “firstoneinfo” : [ # stuff that first json returns, can have their own internal hashes ], “SecondOneinfo : [ #stuff that second json returns, can […]