标签: rails-flash

如何在重定向时显示Rails闪存通知?

我在Rails控制器中有以下代码:

flash.now[:notice] = 'Successfully checked in'
redirect_to check_in_path
Run Code Online (Sandbox Code Playgroud)

然后在/ check_in视图中:

<p id="notice"><%= notice %></p>
Run Code Online (Sandbox Code Playgroud)

但是,通知没有显示出来.如果我不在控制器中重定向,则工作完美:

flash.now[:notice] = 'Successfully checked in'
render action: 'check_in'
Run Code Online (Sandbox Code Playgroud)

我需要重定向...而不仅仅是对该动作的渲染.重定向后可以有闪光通知吗?

ruby-on-rails rails-flash ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-4

58
推荐指数
5
解决办法
7万
查看次数

在ajax调用之后,Rails不显示flash消息

我正在编写一个rails 4.0.2应用程序,并且我试图在AJAX事件之后在我的视图中显示Flash通知.

在我看来,我会显示一个日历,其中包含用户可以点击的日期.当他们这样做时,我通过onclick事件处理程序触发一个AJAX事件,该处理程序更新我的模型,添加或删除记录.触发事件后,我完成页面刷新以显示更新的结果.

我发现在JS点击事件期间我必须刷新页面才能使视图正确更新.仅在控制器中重定向或渲染是不够的.

所以,为此,我在控制器中设置了Flash通知...

def set_conflicts
  @conflict = @member.conflicts.for_date(params[:date]).first

  if @conflict
    @conflict.destroy
  else
    conflict_date = Date.parse(params[:date])
    unless Conflict.create(
        month: conflict_date.month,
        day:   conflict_date.day,
        year:  conflict_date.year,
        member: @member
    )
      flash[:alert] = 'Oops, there was a problem updating conflicts'
    end
  end
  flash[:notice] = 'This is a test!'
  redirect_to manage_member_conflicts_path(@member)
end
Run Code Online (Sandbox Code Playgroud)

...并在我的application.haml中包含以下flash显示逻辑...

...
%body
  = p flash.inspect
  - flash.each do |type, message|
    = content_tag(:div, message, :class => "flash-#{type}")

  = render 'devise/menu/login_items'
  = yield
Run Code Online (Sandbox Code Playgroud)

注意:我在视图中使用HAML而不是ERB

然而,无论我尝试什么,Flash消息都不会显示.除了flash消息之外,其他所有工作都按预期工作,我无法弄清楚原因. …

javascript ajax ruby-on-rails rails-flash ruby-on-rails-4

13
推荐指数
2
解决办法
2万
查看次数

在模型中访问rails flash [:notice]

我试图在模型观察者中为flash [:notice]分配一条消息.

这个问题已经被问到:Ruby on Rails:Observers和flash [:notice]消息?

但是,当我尝试在我的模型中访问它时,我收到以下错误消息:

undefined local variable or method `flash' for #<ModelObserver:0x2c1742c>

这是我的代码:

class ModelObserver < ActiveRecord::Observer
  observe A, B, C

  def after_save(model)
    puts "Model saved"
    flash[:notice] = "Model saved"
  end
end
Run Code Online (Sandbox Code Playgroud)

我知道正在调用该方法,因为"模型保存"被打印到终端.

是否有可能在观察者内部访问闪存,如果是这样,怎么办?

activerecord ruby-on-rails rails-flash

12
推荐指数
2
解决办法
2万
查看次数

Rails闪烁,警告,警告和错误未显示; 只有通知显示

在我看来,我有:

<% flash.now[:error] = "ERROR FLASH" %>
<% flash.now[:notice] = "NOTICE FLASH" %>
<% flash.now[:warning] = "WARNING FLASH" %>
Run Code Online (Sandbox Code Playgroud)

页面渲染时,只显示带有NOTICE FLASH的蓝色信息框.其他两个将不会显示.同样的事情发生在等号上:

<%= flash.now[:error] = "ERROR FLASH" %>
<%= flash.now[:notice] = "NOTICE FLASH" %>
<%= flash.now[:warning] = "WARNING FLASH" %>
Run Code Online (Sandbox Code Playgroud)

我的rails应用程序中是否有设置警告或错误闪烁未出现?

ruby-on-rails rails-flash

5
推荐指数
2
解决办法
2万
查看次数

响应Ajax请求后如何清除Rails闪存对象?

我正在为某些控制器操作执行此类操作:

def my_method

  flash[:notice] = "Success."

  respond_to do |format|
    format.js { render 'common/flashes' }
  end

end
Run Code Online (Sandbox Code Playgroud)

而且效果很好,并且闪光警报和通知显示得很好。但是,当用户单击以转到另一页时,该Flash消息将再次显示。由于我处理它们的方式,Rails显然不知道使用了它们。完成上面的渲染后,如何清除它们?

ruby-on-rails rails-flash ruby-on-rails-3 ruby-on-rails-3.2

5
推荐指数
4
解决办法
4176
查看次数

Rails 3通知

使用Rails 3.0.3结合设计之类的宝石我没有得到任何flash消息.现在我提到设计,因为它控制用于验证我的cookie.

现在Rails应用程序有点特殊,因为它使用子域.他们所做的是告诉应用程序用户正在浏览哪家公司.例如:mycompany.theapp.com/projects/3/ < - 公司"mycompany"的项目3.
当用户登录时,他/她被定向到theapp.com/overview < - 非子域
每次通知都会显示,那么为什么不在子域页面上?

所以这是子域页面上使用的代码.与将其放在非子域页面上的完全相同.控制器中的代码:

def update
  redirect_to [@project], :notice => "Project #{@project.name} updated."
end
Run Code Online (Sandbox Code Playgroud)

layouts/application.html.erb

<% flash.each do |type, message| %>
  <%= content_tag :div, message, :class => "flash #{type}" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我还添加了以下内容,试图弄清楚发生了什么:

flash.to_yaml
# Result: --- !map:ActionDispatch::Flash::FlashHash {} 
Run Code Online (Sandbox Code Playgroud)

由于显然设计使用flash [:notice]我也尝试过(因为那是为了设计).

flash[:notice] = "Project #{@project.name} updated."
# Result: --- !map:ActionDispatch::Flash::FlashHash {} 
Run Code Online (Sandbox Code Playgroud)

现在,通知是否会通过cookie或会话数据发送,而这些数据不能很好地传输到子域?因为该项目的编辑形式在mycompany.theapp.com/projects/3/edit/上
,它将我发送到mycompany.theapp.com/projects/3/(不另行通知)

它发生在带有"rails服务器"的Ubuntu 10.10上,乘客使用nginx,甚至在Mac机器上(但有人测试过).

有人在乎猜?

subdomain ruby-on-rails devise rails-flash

4
推荐指数
1
解决办法
1150
查看次数

替换devise_error_messages!用flash消息

我使用了生成我的设计视图 rails g devise:views users

我使用了生成我的设计控制器 rails g devise:controllers users

我添加了我的新控制器routes.rb:

  devise_for :users, controllers: { sessions: "users/sessions", 
                                    confirmations: "users/confirmations",
                                    registrations: "users/registrations", 
                                    passwords: "users/passwords",
                                    unlocks: "users/unlocks"}
Run Code Online (Sandbox Code Playgroud)

根据这个答案,我改变了我的flash消息来处理Arrays:rails - Devise - Handling - devise_error_messages

像这样:

<% flash.each do |key, value| %>
    <% if value.class == Array %>
        <% value.each do |message| %>
            <div class="<%= flash_class(key) %>">
                <%= message %>
            </div>
        <% end %>
    <% else %>
        <div class="<%= flash_class(key) %>">
            <button type="button" class="close" data-dismiss="alert">×</button>
            <%= value %>
        </div>

    <% …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise rails-flash ruby-on-rails-3 devise-confirmable

3
推荐指数
1
解决办法
4307
查看次数

如何在会话或flash中传递表单错误?[Rails 2.3.5]

我有一个表单的创建操作可能会产生错误(即缺少名字),然后重定向.

问题是,当重定向发生时,那些形式错误就会丢失.我怎样才能在会话中传递这些表单错误以原始形式显示(仍应填写之前的详细信息,如原始的error_messages行为)?

谢谢!


代码:

def create
  @contact = Contact.new(params[:contact])
  if @contact.save
    flash[:notice] = "Sent."
  else
    flash[:notice] = "Error."
  end
end
Run Code Online (Sandbox Code Playgroud)

forms session ruby-on-rails rails-flash

2
推荐指数
1
解决办法
2531
查看次数