我想创建一个用于在我的网页页脚中注册邮件列表的表单。 我所做的是创建一个部分,在应用程序布局的页脚中呈现这个小形式。
以下是部分代码:
<%= 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变量,但问题是邮件列表控制器中的新操作不会被调用,因为我不一定要访问该页面。此表单位于每个页面的页脚中。
创建此表单的正确方法是什么? 有没有办法在不调用每个控制器中的MailingList.new的情况下执行此操作?
谢谢!
答案 0 :(得分:2)
将您的表单更改为此
<%= form_for MailingList.new, html: { remote: true } do |f| %>
所以你不必担心实例变量。您还应该传递remote: true
,以便通过ajax提交表单。要显示错误,请在create.js.erb
下创建一个名为app/views/mailing_lists
的文件,然后添加以下内容(只是在表单前附加错误的简单脚本)
$('.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 %>
答案 1 :(得分:0)
您可以将form_for
方法更改为:
<%= form_for :mailing_list, url: mailing_lists_path do |f| %>
然后您不再需要为每个页面初始化@mailing_list
。
需要注意的是,您无法在页脚中呈现错误。您需要使用问题中的代码创建new.html.erb
视图,如果在创建操作中保存时出现任何错误,则可以呈现该视图。