你能告诉我创建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
我正在尝试编写LIKE查询.
我读到纯字符串quires不安全,但我找不到任何解释如何编写安全的LIKE Hash Query的文档.
可能吗?我应该手动防御SQL注入吗?
我应该将纬度和经度存储为字符串或浮点数(或其他内容)吗?
(我在轨道上使用activerecord/ruby,如果这很重要的话).
我正在使用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.
我正在使用Heroku来托管我的Ruby on Rails应用程序,出于某种原因,我可能会有一些重复的行.
有没有办法根据2个或更多标准删除重复记录,但只保留该重复集合的1个记录?
在我的用例中,我在我的数据库中有汽车的Make和Model关系.
Make Model
--- ---
Name Name
Year
Trim
MakeId
Run Code Online (Sandbox Code Playgroud)
我想删除所有具有相同名称,年份和修剪的模型记录,但保留其中一条记录(意思是,我需要记录但只有一次).我正在使用Heroku控制台,因此我可以轻松地运行一些活动的记录查询.
有什么建议?
我知道有三个主要的符号为whereActiveRecord方法提供参数:
指定and的where方法是直截了当:
# 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
我在我的一个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 =)方法并验证子项(任务),但不保存父项目(项目)如果任何孩子(任务)无效?
有任何想法吗?
我有这个代码
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并且可以手动输入查询?
我想有一个可以批量分配的所有属性名称的列表.我需要这个自定义表单构建器,默认情况下不会添加无法批量分配的输入字段.例如,如果我有一个类似的模型:
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 ×10
ruby ×2
associations ×1
codeigniter ×1
destroy ×1
duplicates ×1
inner-join ×1
join ×1
left-join ×1
mysql ×1
nested ×1
null ×1
types ×1
validation ×1