在不同位置放置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 应用程序的哪个位置放置将不同 JSON 字符串展平为类友好格式的功能?