我正在尝试做一些相当简单的事情,但我不确定有轨道方法可以做到这一点。最简单的是,我有一个索引页面,您可以在其中注册邮件列表。
我正在尝试设置它,以便您可以从索引页面添加到邮件列表,而无需查看邮件列表视图。我可以使用以下内容正确提交数据:
= form_for @mailing_list, :remote => true do |form|
= if @mailing_list.errors.any?
%ul
= @mailing_list.errors.full_messages.each do |message|
%li
= message
.field
= form.label :email, 'Your email'
= form.text_field :email
= form.submit "Add to Mailing List"
使用控制器:
def create
@mailing_list = MailingList.new(params[:mailing_list])
if @mailing_list.save
redirect_to(:root, :notice => 'Mailing list was successfully created.')
else
? How do I return the errors ?
end
end
但我无法收回错误(即电子邮件无效等)。有没有更好的方法来做我正在尝试的事情?我只想从索引页面视图中调用并响应MailingList控制器的操作...
答案 0 :(得分:0)
我相信您想要一个可以将某人添加到邮件列表而不会离开该页面的表单。
更好?嗯..好吧,我会告诉你我做了什么,你可以决定你喜欢什么。
我会在控制器中使用respond_to
来区分标准html调用和远程js调用。然后,我会在视图中处理页面更改。我喜欢在视图中保留显示。
控制器:
def create
@mailing_list = MailingList.new(params[:mailing_list])
if @mailing_list.save
respond_to do |format|
format.html { redirect_to(:root, :notice => 'Mailing list was successfully created.') }
format.js { render }
end
else
respond_to do |format|
format.html { render }
format.js { render :errors }
end
end
end
create.js.erb
$('#errors').html('').hide();
$('form').html('Mailing list was successfully created.'); // needs a better element
errors.js.erb
$('#errors').html('<%= escape_javascript(@mailing_list.errors.full_messages.collect { |msg| content_tag :li, msg }.join().html_safe) %>').show();
答案 1 :(得分:-1)
您可以对@mailing_list上的errors对象执行某些操作,例如
flash.now[:error] = @mailing_list.errors.full_messages