如何在 duels / _dueler_fields 下的current_user
中显示text_field :name
的名称?
DuelsController
def new
@duel = Duel.new
@duel.duelers << Dueler.new(user: current_user)
end
rails 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
答案 0 :(得分:1)
根据您的描述,看起来您想要的并不是您正在做的事情;使用fields_for
将允许您创建关联模型的新实例,但似乎您只想将其链接到现有实例。
如果是这种情况,请尝试以下方法:
<强>决斗/ _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 %>
使用f.association
应自动生成包含所有可用用户的下拉列表,并使用相应模型的to_s
方法呈现其对象(在本例中为User
)
正因为如此,您还需要确保User
模型中有一种方法可以将to_s
覆盖为合理的方式,例如
<强>模型/用户强>
def to_s
name
end
或者,如果您只想输入显示当前用户名称的静态文本字段并且不允许对其进行编辑,则可以执行以下操作:
<强>决斗/ _form 强>
<%= 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 %>