我是Rails的新手。我尝试制作一个组列表(/groups
),我想在每行中编辑和删除选项。编辑应该通过模态实现,因为Group只有一个属性 - name
。所以我不想打开/groups/number/edit
。
我的问题是:我不知道如何将所选群组与form_for
绑定。也许这不是一个好方法。
显示模态,但名称字段为空。当我使用@group
的调试时也是空白的。我不知道为什么。
这是我的代码(单组行):
<li id="group-<%= group.id %>" class="list-group-item">
<span class="group-name"><%= group.name %></span>
<%= link_to edit_group_path(group.id), "data-toggle" => "modal", "data-target" => "#myModal", :class => "edit-option btn" do %>
<i class="fa fa-pencil-square-o fa-2x" ></i>
<% end %>
<%= link_to group, method: :delete, data: { confirm: "Na pewno chcesz usunąć tę grupę?" }, :class => "delete-option btn btn-danger" do %>
<i class="fa fa-trash-o" > usuń</i>
<% end %>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Zmień nazwę grupy</h4>
</div>
<%= form_for(@group) do |f| %>
<div class="modal-body">
<%= debug @group %>
<p>
<%= f.label :name, "Nazwa" %>
<%= f.text_field :name, class: 'form-control'%>
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
<%= f.submit "Zapisz zmiany", class: "btn btn-primary" %>
</div>
<% end %>
</div>
</div>
</div>
控制器
def edit
@group = current_user.groups.find_by(id: params[:id])
end
def update
@group = current_user.groups.find_by(id: params[:id])
if @group.update_attributes(group_params)
flash[:success] = "Nazwa grupy została zmieniona"
redirect_to groups_path
else
redirect_to groups_path
end
end
答案 0 :(得分:1)
我会假设上述问题的答案是肯定的,所以,我会继续回答。
首先:您不想为每个组重复不同的模态,您只希望所有组都使用单个模态。
第二件事:你想要将group.id
发送到控制器中的编辑方法,以便将该组返回到你的模态
然而,问题在于你是如何努力实现这一目标的。
<%= link_to edit_group_path(group.id), "data-toggle" => "modal", "data-target" => "#myModal", :class => "edit-option btn" do %>
点击后,您告诉您的链接执行两项操作:(1)go to edit path
(2)open modal
。哪一个会更重要?现在,它是打开的模式,而不是编辑路径工作,这意味着你根本没有进入控制器,所以要考虑你的@group
为空的原因。
要实现这一点,你必须告诉你的链接只做一件事,当成功时,做另一件事。
我的建议是在链接上使用Ajax(通过设置remote: true
)转到控制器,然后在响应时打开模式。
以下是步骤细分:
1.设置remote: true
以使用Ajax进行调用
<%= link_to edit_group_path(group.id), remote: true %>
2.Tell控制器操作(在这种情况下,edit
操作)以响应js
def edit
@group = current_user.groups.find_by(id: params[:id])
format.js
end
准备一个edit.js.erb
文件来处理响应(这将与您的其他视图文件位于同一目录中)
使用来自回复
@group
填充表单
使用Javascript显示模态
$('.modal-title').html("Edit Group")
$('.modal-body').html("<%= escape_javascript( render partial: 'form', locals: {group: @group} ) %>")
$('#myModal').modal()
尽可能简单直接。希望这会有很大的帮助。