【问题标题】:Rails 3.2 create a form that's used in the footer of every pageRails 3.2 创建一个用于每页页脚的表单
【发布时间】:2013-03-17 21:15:12
【问题描述】:

我想在我的网页页脚创建一个用于注册邮件列表的表单。 我所做的是创建一个在应用程序布局的页脚中呈现这个小表单的部分。

这里是部分代码:

<%= form_for(@mailing_list) do |f| %>
  <% if @mailing_list.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@mailing_list.errors.count, "error") %> prohibited this mailing_list from being saved:</h2>

      <ul>
      <% @mailing_list.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :first_name %><br />
    <%= f.text_field :first_name %>
  </div>
  <div class="field">
    <%= f.label :last_name %><br />
    <%= f.text_field :last_name %>
  </div>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我仍在学习 rails,所以这是从脚手架生成的代码。根据我收集的信息,我需要使用 @mailing_list = MailingList.new 实例化 @mailing_list 变量,但这里的问题是邮件列表控制器中的 NEW 操作不会被调用,因为我不一定要访问该页面。此表单位于每个页面的页脚中。

创建此表单的正确方法是什么? 有没有办法在每个控制器中不调用 MailingList.new 来做到这一点?

谢谢!

【问题讨论】:

  • 您可能对Cells 感兴趣。否则使用before_filter 在任何地方实例化你的@mailing_list,但是当你处理表单时它会变得非常棘手(你需要重定向到某个地方......但是当你有错误时会发生什么?)
  • 感谢 m_x 让我了解细胞之类的东西 :)
  • 感谢您也让我了​​解细胞。至于重定向和错误,我打算在这种特殊形式中使用 ajax。

标签: ruby-on-rails ruby ruby-on-rails-3.2


【解决方案1】:

把你的表格改成这个

<%= form_for MailingList.new, html: { remote: true } do |f| %>

因此您不必担心实例变量。您还应该通过 remote: true 以便通过 ajax 提交表单。要显示错误,请在 app/views/mailing_lists 下创建一个名为 create.js.erb 的文件并添加以下内容(只是一个在表单前附加错误的简单脚本)

$('.error-messages').remove();
<% if @mailist_list.errors.any? %>
  $('#new_mailing_list').before('<ul class="error-messages"></ul>');
  <%= @mailing_list.errors.full_messages.each do |msg| %>
    $('.error-messages').append('<li><%= escape_javascript msg %></li>');  
  <% end %>
<% end %>

【讨论】:

    【解决方案2】:

    您可以将form_for 方法更改为:

    <%= form_for :mailing_list, url: mailing_lists_path do |f| %>
    

    那么您不再需要为每个页面初始化@mailing_list

    需要注意的是,您不能在页脚中呈现错误。您需要使用问题中的代码创建一个new.html.erb 视图,如果在创建操作中保存时出现任何错误,则可以呈现该视图。

    【讨论】:

      猜你喜欢
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多