标签: activerecord

Rails - 最佳实践:如何创建依赖的has_one关系

你能告诉我创建has_one关系的最佳做法吗?

如果我有一个用户模型,它必须有一个配置文件...

我怎么能做到这一点?

一个解决方案是:

# user.rb
class User << ActiveRecord::Base
  after_create :set_default_association

  def set_default_association
    self.create_profile
  end
end
Run Code Online (Sandbox Code Playgroud)

但这似乎不是很干净......有什么建议吗?

ruby activerecord ruby-on-rails associations ruby-on-rails-3

74
推荐指数
5
解决办法
4万
查看次数

安全的ActiveRecord就像查询一样

我正在尝试编写LIKE查询.

我读到纯字符串quires不安全,但我找不到任何解释如何编写安全的LIKE Hash Query的文档.

可能吗?我应该手动防御SQL注入吗?

ruby activerecord ruby-on-rails-4

73
推荐指数
3
解决办法
5万
查看次数

正确的纬度和经度数据类型?(在activerecord中)

我应该将纬度和经度存储为字符串或浮点数(或其他内容)吗?

(我在轨道上使用activerecord/ruby​​,如果这很重要的话).

activerecord types ruby-on-rails

72
推荐指数
3
解决办法
3万
查看次数

使用CodeIgniter查询MySQL,选择field为NULL的行

我正在使用CodeIgniter的Active Record类来查询MySQL数据库.我需要在表中选择一个字段未设置为NULL的行:

$this->db->where('archived !=', 'NULL');
$q = $this->db->get('projects');
Run Code Online (Sandbox Code Playgroud)

这只返回此查询:

SELECT * FROM projects WHERE archived != 'NULL';
Run Code Online (Sandbox Code Playgroud)

archived字段是一个DATE字段.

有没有更好的方法来解决这个问题?我知道我可以自己编写查询,但我不想在整个代码中坚持使用Active Record.

mysql null activerecord codeigniter

72
推荐指数
5
解决办法
10万
查看次数

根据多列删除重复记录?

我正在使用Heroku来托管我的Ruby on Rails应用程序,出于某种原因,我可能会有一些重复的行.

有没有办法根据2个或更多标准删除重复记录,但只保留该重复集合的1个记录?

在我的用例中,我在我的数据库中有汽车的Make和Model关系.

Make      Model
---       ---
Name      Name
          Year
          Trim
          MakeId
Run Code Online (Sandbox Code Playgroud)

我想删除所有具有相同名称,年份和修剪的模型记录,但保留其中一条记录(意思是,我需要记录但只有一次).我正在使用Heroku控制台,因此我可以轻松地运行一些活动的记录查询.

有什么建议?

activerecord duplicates destroy ruby-on-rails-3

72
推荐指数
4
解决办法
3万
查看次数

ActiveRecord OR查询哈希表示法

我知道有三个主要的符号为whereActiveRecord方法提供参数:

  1. 纯字符串
  2. 排列
  3. 哈希

指定andwhere方法是直截了当:

# Pure String notation
Person.where("name = 'Neil' AND age = 27")

# Array notation
Person.where(["name = ? AND age = ?", 'Neil', 27])

# Hash notation
Person.where({name: "Neil", age: 27})
Run Code Online (Sandbox Code Playgroud)

or为这个相同的where方法指定是为了哈希语法.可能吗?

# Pure String notation
Person.where("name = 'Neil' OR age = 27")

# Array notation
Person.where(["name = ? OR age = ?", 'Neil', 27])

# Hash notation DOESN'T WORK
Person.where({name: "Neil" OR age: 27})
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails ruby-on-rails-4 rails-activerecord ruby-on-rails-5

72
推荐指数
1
解决办法
2万
查看次数

accepts_nested_attributes_for子关联验证失败

我在我的一个Rails模型中使用accepts_nested_attributes_for,我想在创建父节点后保存子节点.

表单完美无缺,但验证失败.为简单起见,请想象以下内容:

class Project < ActiveRecord::Base
  has_many :tasks
  accepts_nested_attributes_for :tasks
end

class Task < ActiveRecord::Base
  belongs_to :project

  validates_presence_of :project_id
  validates_associated :project
end
Run Code Online (Sandbox Code Playgroud)

而我正在运行:

Project.create!(
  :name => 'Something',
  :task_attributes => [ { :name => '123' }, { :name => '456' } ]
)
Run Code Online (Sandbox Code Playgroud)

保存项目模型后,验证失败,因为它们没有project_id(因为项目尚未保存).

似乎Rails遵循以下模式:

  • 验证项目
  • 验证任务
  • 保存项目
  • 保存任务

模式应该是:

  • 验证项目
  • 通过:保存项目并继续......
  • 验证任务
    • 通过:保存任务
    • 失败:删除项目(可能会回滚?)

所以我的问题归结为:如何在保存父(项目)之后让Rails运行project_id =(或project =)方法并验证子项(任务),但不保存父项目(项目)如果任何孩子(任务)无效?

有任何想法吗?

validation activerecord nested ruby-on-rails

71
推荐指数
3
解决办法
2万
查看次数

Rails ActiveRecord:与LEFT JOIN而不是INNER JOIN连接

我有这个代码

User.find(:all, :limit => 10, :joins => :user_points,
                :select => "users.*, count(user_points.id)", :group =>
                "user_points.user_id")
Run Code Online (Sandbox Code Playgroud)

它生成以下sql

SELECT users.*, count(user_points.id) 
FROM `users` 
INNER JOIN `user_points` 
ON user_points.user_id = users.id 
GROUP BY user_points.user_id 
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

是否可以以其他方式进行LEFT JOIN而不是INNER JOIN,User.find_by_sql并且可以手动输入查询?

activerecord join ruby-on-rails inner-join left-join

71
推荐指数
3
解决办法
7万
查看次数

如何获取可以批量分配的activerecord模型的属性列表

我想有一个可以批量分配的所有属性名称的列表.我需要这个自定义表单构建器,默认情况下不会添加无法批量分配的输入字段.例如,如果我有一个类似的模型:

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end
Run Code Online (Sandbox Code Playgroud)

我希望得到一个包含以下内容的列表:author,:title.

知道这种方法是否存在?或者一些关于如何制作这样做的指导方针?

activerecord ruby-on-rails

70
推荐指数
4
解决办法
7万
查看次数

Rails 3跳过验证和回调

我有一个特别复杂的模型,其中定义了验证和回调.业务需求现在需要一个特定的场景,添加新记录需要跳过验证和回调.最好的方法是什么?

activerecord ruby-on-rails ruby-on-rails-3

70
推荐指数
3
解决办法
7万
查看次数