如果部分由不同的控制器视图呈现,是否可以在局部访问控制器的实例变量?

时间:2014-09-02 00:18:37

标签: ruby-on-rails ruby ruby-on-rails-4 rendering partial-views

大家好,先谢谢你的帮助。我正在使用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

3 个答案:

答案 0 :(得分:1)

从您的外部视图来看,假设@fort已在您的控制器中实例化,您可以将@fort直接传递给您的部分:

<%= render 'forts/new', :fort => @fort %>

答案 1 :(得分:0)

我认为你要找的是accepts_nested_attributes_forThis 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"} %>