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

ただし、実際の DB スキーマまたはモデル名がわからないため、これが状況に適しているかどうかはわかりません。

于 2012-04-26T02:57:33.537 に答える
2

パラメータ化され.where()た は、次のような構文を使用します。

@runs = Run.where("user_id = ?", current_user.id)

ハッシュとして実行することもできます。これはもう少し読みやすいかもしれません:

@runs = Run.where(:user_id => current_user.id)

このようにしないでください(プレーン文字列として)...

id改ざんされる可能性は低いですが、SQL インジェクションの脆弱性を開く可能性があるため...

# 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 automaticall のロードは、現在実行中のユーザーに対してのみ実行する必要があります。追加のドキュメントを読んでください:)RunAbility:readload_resourceindex

于 2012-04-27T00:58:39.707 に答える