我有一个编辑视图。在这个视图中,我得到了一个下拉列表和一个部分渲染表单。像这样:
<ul class="dropdown-menu dropdown-user installations">
<% @installations.each do |i| %>
<li><a href="#">Installation<%= i.installation_id%></a></li>
<% end %>
</ul>
<div class="ibox-content form-installations">
<%= render :partial => 'installations/test'%>
<%= render 'form_data' %>
</div>
编辑表单的视图:
<%= simple_form_for @installation, class: 'form-horizontal' do |f| %>
<%= f.error_notification %>
...
<%end%>
控制器:
def edit
@installations = current_user.installations
@installation = current_user.installations[0]
end
所以在这一点上我可以在下拉列表中看到所有安装,但只能编辑第一个&#34; current_user.installations [0]&#34;。所以我的目标是在下拉菜单中选择安装并编辑选定的安装。我怎么能这样做?
答案 0 :(得分:1)
最简单的方法是将相关的installation
传递给下拉列表:
#app/controllers/installations_controller.rb
class InstallationsController < ApplicationController
def index
@installations = current_user.installations
end
end
#app/views/installations/index.html.erb
<%= render @installations %>
#app/views/installations/_installation.html.erb
<%= simple_form_for installation do |f| %>
...
<% end %>
我认为您的代码结构存在一些重大问题 - 这就是您看到这些问题的原因。
<强> 1。修改
根据定义,编辑是member
路线......
这意味着Rails期望通过该路由加载单个资源(因此您将url.com/:id/edit
作为路径)。
原因很简单--Rails / Ruby是object orientated。这意味着,每次create/read/update/destroy (CRUD)
,您都会将其添加到对象。
使用@installation = Installation.new
等来调用对象...这意味着如果你想编辑&#34;所有&#34;您的安装,您基本上需要为Installations
资源使用其中一个集合路由,将任何字段发送到{{1}路径:
update
此应该将更新发送到您应用的#app/views/installations/_installation.html.erb
<%= simple_form_for installation, method: :patch do |f| %>
...
<% end %>
路径,使其正常运行。
-
<强> 2。泛音强>
部分只是可以有多种用途的视图;你应该只使用&#34;本地&#34;其中的变量。
有两种方法可以将局部范围变量调用为partials:
installations#update
哈希locals: {}
开关在这两种情况下,您都要设置&#34; local&#34;部分内部的变量具有仅在其外部可用的数据。
例如,您正在致电:
as: :__
... 里面部分。这很糟糕,因为您依赖 <%= simple_form_for @installation
- 您最好使用@installation
并在调用部分时填充它(正如我在上面的代码中所做的那样)。 / p>