0

我只想返回属于用户的元素。该user_id值是来自运行的列。我想要的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)

但它没有奏效。我该怎么做?

4

3 回答 3

5

如果您的 User 模型和 Run 模型之间有关联,您应该能够简单地执行current_user.runs. 例如:

class User < ActiveRecord::Base
  has_many :runs
end

class Run < ActiveRecord::Base
  belongs_to :user
end

不过,我不知道您的实际数据库架构或模型名称,因此我无法确定这是否适合您的情况。

于 2012-04-26T02:57:33.537 回答
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}")

查看有关 ActiveRecord 条件的文档以获取完整详细信息。

于 2012-04-26T02:50:36.637 回答
1

Gem cancan非常适合这些用途。如果您使用参数在类中添加user_id条件,并且在控制器中,gem 自动加载只需要为当前用户运行。阅读文档以进行补充:)RunAbility:readload_resourceindex

于 2012-04-27T00:58:39.707 回答