2016-08-11 7 views
0

どのようにしての名前をtext_field :nameに表示することができますか?duels/_dueler_fieldsフォームに異なるオブジェクトの属性を設定するにはどうすればよいですか?

DuelsController

def new 
    @duel = Duel.new 
    @duel.duelers << Dueler.new(user: current_user) 
end 

レールC

pry(main)> Duel.last 
id: 20, 
consequence: "Run naked lap", 
pry(main)> Dueler.last 
id: 34, 
user_id: 78, 
challenge_id: 295, 
duel_id: 20, 
pry(main)> User.find(78) 
id: 78, 
name: "Anthony" # How to get User's name? 

決闘/ _form

<%= simple_form_for(@duel) do |f| %> 
    <%= f.fields_for :duelers do |dueler| %> 
    <%= render 'dueler_fields', :f => dueler %> 
    <% end %> 

    The loser(s) will <%= f.text_field :consequence, placeholder: "Enter Consequence" %>. 

    <%= f.submit %> 
<% end %> 

あなたの説明から決闘/ _dueler_fields

<%= f.number_field :user_id, placeholder: "Enter User" %>. # This will give the correct id number, but I tried setting it to text_field :name. That didn't work 

答えて

1

、それはあなたがやっているかなりのものではありません欲しいもののように見えます。 fields_forを使用すると、関連するモデルの新しいインスタンスを作成できますが、既存のインスタンスにのみリンクしたいと思われます。

決闘自動的に利用可能なすべてのユーザーを含むドロップダウンリストを生成し、to_s方法のを使用して、それらのオブジェクトをレンダリングする必要がありf.associationを使用して/ _form

<%= simple_form_for(@duel) do |f| %> 
    <%= f.association :user, input_html: {value: current_user.id} %> 

    The loser(s) will <%= f.input :consequence, placeholder: "Enter Consequence" %>. 

    <%= f.submit %> 
<% end %> 

:その場合は

、以下試してください適切なモデル(この場合はUser

これを考慮すると、 Userモデルのメソッドは、to_sを賢明なものに上書きします。あなただけの現在のユーザーの名前を示す静的なテキストフィールドに入れて、それを編集することを許可しないようにしたい場合は、次の操作を行うことができ

モデル/ユーザー

また
def to_s 
    name 
end 

、:

決闘/ _formに助けをBDX

<%= simple_form_for(@duel) do |f| %> 
    <%= f.input :user_id, as: :hidden, input_html: {value: current_user.id} %> 
    <label>User</label><p><%= current_user.name %></p> 

    The loser(s) will <%= f.input :consequence, placeholder: "Enter Consequence" %>. 

    <%= f.submit %> 
<% end %> 
+0

ありがとう!あなたの最初の提案は、 'のための'未定義のメソッド 'user_id'というエラーを返します。 '確かに' current_user'の名前を 'id'ではなく' text_field'に表示しようとしています。返事が遅れて申し訳ありません! –

+0

私はあなたのモデルについても仮定しましたが、そうではないかもしれません。あなたのDuelモデルに 'belongs_to:user'という関連があることを確認してください。 – bdx

+0

また、 'current_user'の名前が選択ボックスではなくテキストフィールドに表示されるように設定されている場合、上記はあなたのためにはうまくいかないでしょう。それには、ユーザの名前に基づいて検索を行い、user_idを '@duel'に入れるようにコントローラを変更するか、HTMLの隠れた' user_id'入力フィールドを私が想像しているように更新するカスタムコントロールを使う必要があります入力された名前のライブルックアップとなります。 – bdx

関連する問題