我想只返回属于用户的元素。 user_id
值是Run中的一列。我想要的只是选择runs
中的current_user
。
def index
@runs = Run.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @runs }
end
end
尝试类似
@runs = Run.where(user_id= => current_user.id)
但它没有奏效。我该怎么办?
答案 0 :(得分:5)
如果您的用户模型与运行模型之间存在关联,则应该只能current_user.runs
。例如:
class User < ActiveRecord::Base
has_many :runs
end
class Run < ActiveRecord::Base
belongs_to :user
end
我不知道您的实际数据库架构或型号名称,因此我无法确定这是否适合您的情况。
答案 1 :(得分:2)
参数化.where()
使用如下语法:
@runs = Run.where("user_id = ?", current_user.id)
它也可以作为哈希来完成,它可能更具可读性:
@runs = Run.where(:user_id => current_user.id)
因为它可能会打开SQL注入漏洞,即使id
不太可能被篡改......
# Don't do this...
@runs = Run.where("user_id = #{current_user.id}")
查看documentation on ActiveRecord conditions以获取完整详情。
答案 2 :(得分:1)
宝石cancan非常适合这些目的。如果您在user_id
类Run
中添加Ability
:read
类,load_resource
param,index
在控制器中,则自动加载仅适用于当前用户的{{1}} {1}}行动。阅读文档以补充:)