标签: before-filter

带参数的before_filter

我有一个类似这样的方法:

before_filter :authenticate_rights, :only => [:show]

def authenticate_rights
  project = Project.find(params[:id])
  redirect_to signin_path unless project.hidden
end
Run Code Online (Sandbox Code Playgroud)

我还想在其他一些控制器中使用此方法,因此我将该方法复制到application_controller中包含的帮助器中.

问题是,在某些控制器中,项目的id不是:id符号,而是fe :project_id(也:id存在a(对于另一个模型)

你会如何解决这个问题?是否可以选择向before_filter操作添加参数(传递右侧参数)?

ruby ruby-on-rails before-filter ruby-on-rails-3

80
推荐指数
4
解决办法
4万
查看次数

如何指定执行before_filters的顺序?

rails是否对使用以下任一用法执行过滤器之前的顺序做出任何保证:

before_filter [:fn1, :fn2]
Run Code Online (Sandbox Code Playgroud)

要么

before_filter :fn1
before_filter :fn2
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.

ruby-on-rails before-filter

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

在Rails中跳过before_filter

为清楚起见,简化了名称和对象.基本概念保持不变.

我有三个控制器:dog,cat,和horse.这些控制器都继承自控制器animal.在控制器中animal,我有一个before过滤器,用于对用户进行身份验证:

before_filter :authenticate

def authenticate
  authenticate_or_request_with_http_basic do |name, password|
    name == "foo" && password == "bar"
  end
end
Run Code Online (Sandbox Code Playgroud)

show行动中dog,我需要对所有用户具有开放访问权限(跳过身份验证).

如果我要单独编写身份验证dog,我可以这样做:

before_filter :authenticate, :except => :show
Run Code Online (Sandbox Code Playgroud)

但是由于dog继承自animal,我无法访问特定于控制器的操作.添加:except => :showanimal控制器不仅将跳过认证show的作用dog,也表明中cathorse.不希望出现这种情况.

如何才能跳过身份验证仅针对仍然继承的show操作?doganimal

inheritance ruby-on-rails before-filter

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

before_filter没有取消行动

我很难在过滤器之前使用我最近从1.9(?)升级到2.3.11的Rails应用程序.为了尝试调试它,我在控制器中放了一个before_filter:

before_filter :false_filter
Run Code Online (Sandbox Code Playgroud)

以及application_controller.rb中的以下内容:

def false_filter
  puts "false filter running"
  false
end
Run Code Online (Sandbox Code Playgroud)

然后我从cucumber/webrat或浏览器调用该方法,并且在调用过滤器时(我可以看到puts输出消息),过滤器链不会被终止.

我想知道是否有一些尚未生成的样板代码.任何人都可以建议去哪里看看?

ruby-on-rails before-filter

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

指定要从before_filter中排除的控制器

我正在使用设计进行身份验证,并在我的应用程序控制器中有一些before_filters.问题我看到的是,当我尝试注销before_filter时会拦截那个并让我继续查看我在before_filter中设置的视图.有什么办法可以指定应该从应用程序控制器或其他文件中排除哪些控制器?

ruby-on-rails before-filter devise

39
推荐指数
3
解决办法
3万
查看次数

条件before_action/before_filter需要"proc"吗?

看哪,一个before_filter:

class ThingController < ApplicationController
  before_filter :check_stuff, :if => proc {Rails.env.production?}
end
Run Code Online (Sandbox Code Playgroud)

在最近的一次代码审查中,我被问到:"这proc是否需要这个?" 答案似乎是'是',但这是一个合理的问题,我打算通过引用Rails文档或指南或者使用条件before_filter(现在是别名before_action)来回答它.

我找不到任何东西.该动作控制器指南提到:only/ :except,而不是:if/ :unless.

如果失败了,我可以指出代码中的某个地方是否涵盖了这一点?它简单提到这里,但更多的是如何:only:except被处理,而不是:if:unless.

before-filter ruby-on-rails-4

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

Rails before_filter用于控制器中的特定操作

  def new
    before_filter  do 
      redirect_to "/" unless current_admin || current_company
      flash[:notice] = 'You dont have enough permissions to be here' unless current_admin || current_company

     end
    CODE CODE CODE
   end

  def edit
    before_filter  do 
      redirect_to "/" unless current_admin.id = 5
      flash[:notice] = 'You dont have enough permissions to be here' unless current_admin || current_company

     end
    CODE CODE CODE
   end
Run Code Online (Sandbox Code Playgroud)

这是我想要做的代码,但我无法弄清楚如何正确地做到这一点.我想要实现的是为我的每个动作应用before_filter规则.因此,或许用户可以存取权限去INDEX行动,但不会在修改动作等我知道的before_filter方法运行一个单一的时间,我不能跑4个before_filters,我只是给的,因为我的英语不好一些参考.

您必须知道我正在使用Devise作为current_admin和current_company方法.我需要应用不同的过滤器(如果是admin或者如果是company.id = X)和其他操作.

在此先感谢,我非常喜欢这里.任何帮助将不胜感激.

ruby ruby-on-rails before-filter devise ruby-on-rails-3.1

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

如何在不执行"before_save"的情况下"update_attributes"?

我有一个before_save在我Message这样定义模型:

   class Message < ActiveRecord::Base
     before_save lambda { foo(publisher); bar }
   end
Run Code Online (Sandbox Code Playgroud)

当我做:

   my_message.update_attributes(:created_at => ...)
Run Code Online (Sandbox Code Playgroud)

foo并被bar执行.

有时,我想更新消息的字段而不执行foobar.

例如,如何更新created_at字段(在数据库中)而不执行foobar

ruby-on-rails before-filter update-attributes ruby-on-rails-3 before-save

24
推荐指数
3
解决办法
3万
查看次数

Rails在before_filter方法中设置布局

是否可以在Rails 3中的before_filter方法中重置默认布局?

我有以下作为我的contacts_controller.rb:

class ContactsController < ApplicationController
  before_filter :admin_required, :only => [:index, :show]
  def show
    @contact = Contact.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @contact }
    end
  end
  [...]
end
Run Code Online (Sandbox Code Playgroud)

以及我的application_controller.rb中的以下内容

class ApplicationController < ActionController::Base
  layout 'usual_layout'
  private
  def admin_required
    if !authorized?          # please, ignore it. this is not important
      redirect_to[...]
      return false
    else
      layout 'admin'  [???]  # this is where I would like to define a new layout
      return true …
Run Code Online (Sandbox Code Playgroud)

layout ruby-on-rails before-filter

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

过滤器出现之前的顺序是什么?

过滤器出现之前的顺序是什么?具体来说,关于inheiritance,before_action过滤器发生了什么顺序?例如,这会工作:

class A < ActionController::Base
  before_action :set_user

  def set_user
    @user = something
  end
end

class B < A
  before_action :set_post

  def show
    render @post
  end

  def set_post
    @post = @user.posts.first
  end
end
Run Code Online (Sandbox Code Playgroud)

"B#show"会起作用吗?筛选顺序有哪些规则供将来参考?我在Rails文档中找不到任何相关内容.

ruby inheritance ruby-on-rails before-filter

20
推荐指数
2
解决办法
9187
查看次数