大家好,先谢谢你的帮助。我正在使用rails构建一种在线游戏。用户界面全部应该围绕一个页面:users / ...我遇到了创建用户之外的对象并与之交互的问题。例如,在用户页面中,用户应该具有创建堡垒的能力。堡垒当然是它自己的对象,有自己的模型和控制器。如果我尝试使用用户页面中的form_for标记创建一个表单来创建一个堡垒,那么该表单将无法访问堡垒控制器的@fort实例变量并且会抛出错误。在我尝试解决问题的过程中,我创建了一个名为_new.html.erb的堡垒的局部视图,其中包含堡垒形式
这是:
<h1>Create a New Fort</h1>
<%= form_for(@fort) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :ownership %>
<%= f.text_field :ownership %>
<div style="display:none;">
<%= f.label :xco %>
<%= f.text_field :xco %>
<%= f.label :yco %>
<%= f.text_field :yco %>
<%= f.label :territory %>
<%= f.password_field :territory %>
</div>
<%= f.submit "Create a Fort" %>
<% end %>
然后我在我的用户show.html.erb中渲染那个部分:
<%= render "forts/new" %>
当然,将表单移动到部分表示什么都没做,但是我希望做的事情就是这样:
<%= render partial: "new", object: @fort %>
我想将fort实例变量传递给partial,然后在users视图中渲染partial。然而,我认识到如上所述传递给partial的变量直接来自部分渲染的视图,并且在那种实现中我不知所措。
我认为密钥可能在关联的某个地方,我一直在爬网上获取相关信息。我的模型已设置好,因此用户拥有多个堡垒,并且堡垒属于用户。我不知道这是否会有所帮助。
感谢所有帮助,
感谢加载,
Alex P
答案 0 :(得分:1)
从您的外部视图来看,假设@fort已在您的控制器中实例化,您可以将@fort直接传递给您的部分:
<%= render 'forts/new', :fort => @fort %>
答案 1 :(得分:0)
我认为你要找的是accepts_nested_attributes_for。 This RailsCast解释了它是如何使用的。
在您的情况下,您可以将accepts_nested_attributes_for :forts
添加到您的用户模型中。我不确定您的用户/节目视图是什么样的,但您应该只能添加<%= f.fields_for :forts do |f| %>
,其中包含当前forts / new中的字段。
答案 2 :(得分:0)
是的,您可以在任何调用partial的地方使用渲染语句传递Locals。
<%= render 'shared/error_messages', :locals => {:info => first, :img_style => "original"} %>