0

重複の可能性:
Ruby on Rails で .find() を使用して単一の結果を返したい

これは私のコードです

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

出力を与える

Couldn't find User with id=user_id

「user_id」を文字列として渡している代わりに、変数を渡していないようです。

選択リストまたはラベルのいずれかに単一の結果を返したいだけです

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

4

2 に答える 2

4

:user_id を find メソッドに渡していますが、これはユーザー ID ではなくシンボルです。

検索する番号を渡す必要があります。その後、find はその ID を持つレコードを検索します。

もう 1 つの問題は、 find の結果に対して collect を呼び出すのはなぜですか? Find は、配列ではなく、1 行のみを返します。

コードを構成する方法は次のとおりです。

たとえば、ユーザー変数をコントローラーに取得する必要があります。

@user = User.find(params[:id])

モデルが見つからない場合、 find は例外をスローすることに注意してください。見たように、モデルが見つからない場合は nil を返す find_by_id の使用を検討してください。

次に、ビューで @user を使用できます。

ユーザーのみを含む選択タグを表示する場合は、次の手順を実行します。

<%= f.select, :user_id, options_for_select([[@user.user_name, @user.id]]) %>

フォーム ヘルパーについては、 http: //guides.rubyonrails.org/form_helpers.htmlを確認してください。

于 2012-11-22T23:11:51.950 に答える
-1

ActiveRecord には @user = User.find_by_id(params[:id]) というメソッドがあります。@user.name を呼び出すことができるインスタンス オブジェクト @user を返します。ruby の慣習はこんな感じで、ID をパラメータとして受け取るメソッドに @user を渡せば、@user.id を書かなくても、Rails は完全に理解してくれます。

于 2012-11-22T23:17:00.293 に答える