2

ユーザー ビューとレンタル ビューがあります。私のレンタル ビューでは、現在のユーザー名を表示しようとしています。私はかなり近いと思いますが、この最後のビットを解決することはできません.

これにより、選択リスト内のすべてのユーザーが返されます

<%= f.select :user_id, User.find(:all).collect {|t|
    [t.user_name, t.id]} %>

これにより、現在のユーザー ID が返されます

<%= f.number_field :user_id %>

だから私は次のようなことができると思った

<%= f.select :user_id, User.find(:user_id).collect {|t|
    [t.user_name, t.id]} %>

現在のユーザーのみを選択リストに返し、値としてIDを、リストに名前を付けたいと思います。上記を実行すると、それが教えてくれます

Couldn't find User with id=user_id

したがって、user_id はリテラル文字列として渡されますが、user_id 変数を 10 のように渡したいと思います。user_id を変数として渡す方法がわかりません。

私はRORにかなり慣れていないので、これについて完全に間違った方法で行っている可能性があります。どんな助けでも大歓迎です。

4

3 に答える 3

0

find()シンボルではなく変数が必要です。そして、:allおそらくあなたが望むものではありません。コントローラに次のようなメソッドを作成する必要があります。

def user(u)
  @user = User.find(u)
end

次に、ビューなどでメソッドを呼び出します(ここで何をしようとしているのか正確にはわかりません)。

<% user(current_user.id) %>

次に@user、プレイできるオブジェクトがあります。つまり、次のようになります。

<%= f.select :user_id, [[@user.name, @user.id]] %>
于 2012-11-23T00:33:18.603 に答える
0

フォームを表示するレンタルオブジェクトがあると仮定しています。それはインスタンス変数@rentalであると仮定します。さらに、Rentalクラス内には次の関係があると仮定します

class Rental

  belongs_to :user

end

次に、次のように記述できます。

f.select :user_id, [[@rental.user.user_name, @rental.user.id]]

お役に立てれば。

関連するがあまり重要ではないメモ: と呼ばれる列を持つのは本当に奇妙です:とにかくそれはユーザーの一部であるuser_nameため、user私はその列を単に と呼びます.name

于 2012-11-23T02:09:46.957 に答える
0

私はあなたができるはずだと思います:

<%= f.select :user_id, User.find(f.object.user_id).collect {|t| [t.user_name, t.id]} %>

しかし、これは私には少し奇妙に思えます。私は次のいずれかを考えていたでしょう:

  • あなたのオブジェクトは関連するユーザーに適切に関連付けられていf.object.user.user_nameますf.object.user.id
  • 現在ログインしているユーザーが本当に必要な場合は、おそらく認証フレームワーク/コードに参照を求める必要があります。たとえば、Devise を使用している場合は、 になりますcurrent_user

余談ですが、現在のユーザーだけを含む選択リストが必要な理由がよくわかりません-それは間違いなくあなたが達成しようとしていることですか、それとも誤解していますか?

于 2012-11-23T00:36:30.883 に答える