渲染表单没有控制器变量

时间:2015-10-09 12:11:00

标签: ruby-on-rails ruby simple-form

控制器操作

def board
   @ids = params[:ids] if params[:ids]
   respond_to do |format|
      format.js do
        render :edit_modal
      end
   end
end

edit_modal.js.erb

$("#editModal .js-modal-body").html(
  "<%= j render "edit_board.html.erb" %>"
);

$('#editModal').modal('show');

edit_board.html.erb

<%= simple_form_for :order_fulfillment,
 url: update_multiple_path,
 method: :patch,
 remote: true do |f| %>
  <%= f.hidden_field :edit_ids, value: @ids %>
<% end %>

出于某种奇怪的原因,我的表单在隐藏字段中没有任何值。但是,当我这样做binding.pry时:

def board
   @ids = params[:ids] if params[:ids]
   binding.pry
   respond_to do |format|
      format.js do
        render :edit_modal
      end
   end
end

表单似乎填充了@ids的值。 binding.pry在该执行线上暂停程序。我无法理解为什么这适用于binding.pry?是因为@ids在呈现edit_modal.js.erb时没有任何值吗?如果是这样的话,为什么会这样,以及如何在@ids内填充edit_board.html.erb

2 个答案:

答案 0 :(得分:1)

将.js文件重命名为您不需要明确呈现它们的操作名称

def board
   @ids = params[:ids] if params[:ids]
   binding.pry
   respond_to do |format|
      format.js
   end
end

重命名edit_modal.js.erb =&gt; board.js.erb

它会起作用

答案 1 :(得分:0)

尝试在此处更改多个代码

<强>控制器

要在rails中使用ajax,只需添加format.js

def board
   @ids = params[:ids] if params[:ids]
   respond_to do |format|
      format.js
   end
end

然后,将edit_modal.js.erb重命名为board.js.erb,因为您必须使用与您的方法相同的文件。在board.js.erb内,您必须更改为

$("#editModal .js-modal-body").html(
  "<%= j render "edit_board" %>"
);

$('#editModal').modal('show');
$('#order_edit_ids').value("<%= @ids %>");

最后。重命名edit_board.html.erb以使用下划线_edit_board.html.erb

我希望这对你有所帮助。