在不同位置放置Rails Form_For字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不同位置放置Rails Form_For字段相关的知识,希望对你有一定的参考价值。

我有一个要用表格填充的模型,该表格由标题和正文组成。 (可选)我希望能够提交链接以及该模型的一部分。如果填写,则提交,否则忽略。例如,该表单将在页面顶部具有标题和正文字段。

<%= form_for(@micropost, remote: true) do |f| %>
  <div class="field">
    <%= f.text_field :title %>
    <%= f.text_area :content %>
  </div>
  <%= f.submit "Post" %>
<% end %>

现在,我想为链接添加字段,但是要在页面上的其他位置(以表明它是可选的)。

    <%= f.text_field :link %>

我尝试一次全部完成,

<%= form_for(@micropost, remote: true) do |f| %>
  <div class="field">
    <%= f.text_field :title %>
    <%= f.text_area :content %>
    <! insert other content here >
    <%= f.text_field :link %>
  </div>
  <%= f.submit "Post" %>
<% end %>

但是这会导致部分的嵌套非常混乱,我不确定如何使其正确工作。另外,我想知道是否有可能在页面顶部有一个form_for,而在页面底部有另一个form_for以某种方式“同步”,因此通过按顶部的Submit按钮,输入的值底部的form_for也被收集并提交。

<%= form_for(@micropost, remote: true) do |f| %>
  <div class="field">
    <%= f.text_field :title %>
    <%= f.text_area :content %>
  </div>
  <%= f.submit "Post" %>
<% end %>

<%= form_for(@micropost, remote: true) do |f| %>
   <! somehow sync this with the other form >
   <%= f.text_field :link %>
<% end %>

答案

一个选项是为link属性具有辅助文本字段。将其值复制到映射link属性的隐藏变量

假设您要使用jQuery,

<%= form_for(@micropost, remote: true) do |f| %>
  <%= f.hidden_field :link %>
  <div class="field">
    <%= f.text_field :title %>
    <%= f.text_area :content %>
  </div>
  <%= f.submit "Post" %>
<% end %>

同一页上的某处

<%= text_field_tag 'micropost[link]', '', id: 'aux_link' %>

<script>
  $(function(){
    $('form').on('submit', function(){
      $('#micropost_link').val($('aux_link'));
    });
  });
<script>

这只是一种方法。根据您的表单元素ID调整代码。

此方法的一个问题是,link属性是否为必填项将很难验证。

另一答案

仅使form_for成为视图的根

您可以像容器form_for一样使用div。然后根据需要放置<input><button>,就像制作普通网页一样。

然后,因为您想使某些输入为可选,所以可以在rails控制器中进行此操作。

def create_or_update
  params[:micropost].delete(:link) if params[:micropost][:link].blank?
  # continue the task
end

此技巧对所有可选字段(例如密码)很有用

以上是关于在不同位置放置Rails Form_For字段的主要内容,如果未能解决你的问题,请参考以下文章

将附加字段动态添加到 rails 表单

我应该在 Rails 应用程序的哪个位置放置将不同 JSON 字符串展平为类友好格式的功能?

rails同一页面上不同控制器的两种形式

Rails:form_for 命名空间资源

不允许用户在 ruby​​ on rails 中提交带有空字段的表单

Rails 将 form_for 对象传递给部分