Tag: rails activerecord

Rails无法写入数据库中的序列化数组字段

我在我的模型上设置了数组,当我将数组写入我的记录时,它表示COMMIT为true,但在返回空数组后立即检查该记录上的字段。 模型: class Feature < ActiveRecord::Base serialize :content, Array attr_accessible :content end 移民: class AddContentToFeatures < ActiveRecord::Migration def change add_column :features, :content, :text, array: true, default: [] end end 我尝试过的,以及各种符号和字符串语法,是这样的: > f=Feature.new > f.content_will_change! #i feel like i shouldn’t have to do this > f.content = [‘sadasd’,’asdasd’] > f.save! BEGIN COMMIT => true > f.content […]

如何通过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的平均评分,然后按照最高平均评分对这些记录进行排序并在视图中显示。

Rails:查询按数字排序记录,除了0

我正在根据优先级(升序)排列数据,其中在优先级中忽略’0’。 下面是Rails查询: Profile.where(active: true).order(:priority).pluck(:priority) 此查询返回一个有序的记录列表,其优先级从“0”开始 [0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 7] 您可以帮我弄清楚如何订购数据,其中在查询中添加了带有“0”的记录,如下例所示。 Example: [1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 7, 0]

rails动态在哪里sql查询

我有一个对象,有一堆属性代表可搜索的模型属性,我想只使用设置的属性动态创建一个SQL查询。 我创建了下面的方法,但我相信它容易受到sql注入攻击。 我做了一些研究并阅读了rails活动记录查询界面指南,但似乎where条件总是需要一个静态定义的字符串作为第一个参数。 我还试图找到一种方法来清理我的方法生成的sql字符串,但似乎没有一种好的方法可以做到这一点。 我怎么能做得更好? 我应该使用where条件还是以某种方式清理这个sql字符串? 谢谢。 def query_string to_return = “” self.instance_values.symbolize_keys.each do |attr_name, attr_value| if defined?(attr_value) and !attr_value.blank? to_return << "#{attr_name} LIKE '%#{attr_value}%' and " end end to_return.chomp(" and ") end

Rails 4关系#所有弃用

在我的应用中,我创建了最近的postfunction。 @recentposts = Post.all(:order => ‘created_at DESC’, :limit => 5) 这个变量有些麻烦。 当我运行测试时,我有以下错误: 弃用警告:不推荐使用Relation#all。 如果您想要加载关系,可以调用#load(例如Post.where(published: true).load )。 如果要从关系中获取记录数组,可以调用#to_a(例如Post.where(published: true).to_a )。 (来自/home/mateusz/rails4/Bloggers/app/controllers/users_controller.rb:18上的节目) 我在Google上搜索解决方案,但我找不到它……

使用嵌套表单创建用户时Rails回滚

我在尝试将用户添加到我的数据库时收到回滚,但我不确定原因。 我有三个型号: company.rb class Company < ActiveRecord::Base acts_as_paranoid has_many :locations, dependent: :destroy has_many :users, dependent: :destroy has_many :tests, through: :locations has_many :reports, dependent: :destroy accepts_nested_attributes_for :locations, :users validates_presence_of :name end ** user.rb ** class User < ActiveRecord::Base acts_as_paranoid devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :registerable belongs_to :company has_and_belongs_to_many :roles end ** location.rb ** class Location […]

否定ActiveRecord查询范围

我的模型范围略微复杂 class Contact { where(inactive: false) } scope :groups, -> { where(contact_type: 2308) } scope :group_search, -> (query) do active.groups.where(“last_name LIKE ‘%’ + ? + ‘%'”, query) end end 出于测试目的,我想确保group_search 未返回的所有Contacts都被排除在正确的原因之外。 但要获得该列表,我必须加载 Contact.all – Contact.group_search(‘query’) 它运行两个查询,返回一个Array而不是一个Relation ,并且比我想要的慢。 由于我正在测试group_search范围,因此编写另一个负面范围会破坏这一点。 我宁愿做一些像: Contact.merge.not(Contact.group_search(‘query’)) 生成以下SQL查询: SELECT * FROM contacts WHERE NOT (contact_type = 2308 AND inactive = 0 AND […]

动态创建查询 – Rails 5

如果我手动编写查询,它就会像 User.where(“name LIKE(?) OR desc LIKE(?)”,’abc’,’abc’) .where(“name LIKE(?) OR desc LIKE(?)”,’123′,’123′) 但是,我需要动态生成该查询。 我正在获取数据 def generate_query(the_query) query,keywords = the_query # Here # query = “name LIKE(?) OR desc LIKE(?)” # keywords = [[‘abc’,’abc’],[‘123′,’123’]] keywords.each do |keyword| users = User.where(query,*keyword) <– not sure how to dynamically add more 'where' conditions. end end 我正在使用Rails 5.希望很清楚。 任何帮助赞赏:)

基于枚举值的自定义顺序

我为角色定义了Enum: enum role: {ordinary: 0, manager: 1, admin: 2} 我想按以下顺序订购一组对象: admin (first all admins) ordinary (then all ordinaries) manager (and lastly all managers) 这有可能吗?

应该匹配的ActiveRecord匹配器是否违反了“测试行为不实施”规则?

例如,如果我在我的规范中使用should validate_presence_of ,那只是测试我在模型中有validate_presence_of代码片段,那就是测试实现。 更重要的是,测试真正的问题并不是那个规范完全没用,“如果我没有填写某个字段,那么模型是否会成功保存?”