我有以下型号:
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
end
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class Post < ActiveRecord::Base
belongs_to :group
end
Run Code Online (Sandbox Code Playgroud)
我必须找到属于用户所属组的所有帖子.我用这种方法做到了:
@post = Post
.joins(:group => {:memberships => :user})
.where(:memberships => {:user_id => current_user.id})
Run Code Online (Sandbox Code Playgroud)
但它会产生效率低下的SQL:
SELECT "posts".* FROM "posts"
INNER JOIN "groups" ON "groups"."id" = "posts"."group_id"
INNER JOIN "memberships" ON "memberships"."group_id" = "groups"."id"
INNER JOIN "users" ON "users"."id" = …Run Code Online (Sandbox Code Playgroud) 我想使用rails活动记录执行原始SQL查询,但是我的查询使用了一个参数,但是我找不到合适的方法来将该参数安全地传递到查询字符串中。查询如下
def self.get_branches_by_workspace_name(workspace_name)
branches = ActiveRecord::Base.connection.execute("
select
address,
phone,
email,
services
from branches as b, workspaces as w
where b.workspace_id = w.id and w.name= :workspace_name", workspace_name).to_a
return branches
end
Run Code Online (Sandbox Code Playgroud)
我想传递一个名为“ workspace_name”的参数。有什么帮助吗?