【发布时间】:2016-09-28 18:34:10
【问题描述】:
如果电子邮件已保存/未保存,我想显示通知/错误,不使用重定向。我在项目中使用 Rails 4,这是我的代码:
layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>FarFlung Jobs</title>
<!-- /.You can include style.css into stylesheet_link_tag too. If you do so, dont forget to add style.css in asset.rb -->
<%= stylesheet_link_tag 'application', 'jobs', media: 'all' %>
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag 'config', 'sharebutton', 'jobsalert', 'modernizr'%>
<%= render 'payola/transactions/stripe_header' %>
<%= csrf_meta_tags %>
</head>
<body>
<%= render 'shared/navbar' %>
<div>
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, class: 'alert alert-info' %>
<% end %>
</div>
<%= yield %>
<%= render 'shared/footer' %>
</body>
</html>
users/new.html.erb
<section class="cd-form-wrapper cd-container">
<div class="column panel panel-default">
<div class="cd-filter"><h4>SUBSCRIBE FOR JOBS ALERT</h4></div>
<%= simple_form_for User.new do |f| %>
<%= f.input :email, label: false, :placeholder => 'Enter your email address...', :input_html => { :class => 'newsletter-form-field-styling' } %>
<%= f.button :submit, 'SUBMIT', :class => 'btn-block newsletter-form-styling btn-primary submit' %>
<% end %>
</div>
</section>
users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(secure_params)
if @user.valid?
@user.save
flash.now[:notice] = "#{@user.email} is signed up for Jobs Alert."
else
flash.now[:alert] = 'Error Subscribing!'
end
end
private
def secure_params
params.require(:user).permit(:email)
end
end
如何在不重定向页面的情况下让 Rails flash 消息正常显示在我的订阅表单上?
【问题讨论】:
-
不,你不能这样做。你会有模板丢失错误。你可以使用
render,它不会刷新页面。但是你新添加的数据将不会出现,因为你必须使用重定向或 ajax。 -
@7urkm3n,我的 Ajax 知识有点生疏。如果我将成功和错误消息定义为“部分”,并在我的视图/注册表单中呈现该部分,这是否可以解决我的问题,使我的表单上有错误和成功消息而无需重定向?
标签: ruby-on-rails ruby-on-rails-4