小编eva*_*phy的帖子

如何在Ruby中设置布尔默认值?

对于其他类型的变量,我使用||=,但这对布尔值不起作用(x ||= true即使x先前被赋值为false,也将x指定为true).

我认为这会奏效:

x = true unless defined?(x)
Run Code Online (Sandbox Code Playgroud)

但事实并非如此:出于某种原因,它将x分配给nil.(这里的解释将不胜感激.)

我知道一种有效的方法:

unless defined?(x)
  x = true
end
Run Code Online (Sandbox Code Playgroud)

但它相当冗长.有没有更简洁的方法在Ruby中为布尔变量赋值默认值?

ruby

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

如何通过覆盖respond_with等方法来干掉Rails 3控制器?

我正在尝试为我的Rails 3应用程序创建一个JSONP API.现在在我的控制器中,我有很多遵循这种模式的动作:

# This is from my users_controller.rb, as an example

def index
  @users = User.all
  respond_with(@users, :callback => params[:callback])
end
Run Code Online (Sandbox Code Playgroud)

虽然这是按原样运作的,但我想通过不必重复:callback => params[:callback]每一个动作的呼叫来干它respond_with.我怎样才能做到这一点?

更新:有一件事我已经意识到我的上述代码是丑陋的,该:callback => params[:callback]选项将被传递给任何响应格式,而不仅仅是JSON.以下代码可能更正确:

def index
  @users = User.all
  respond_with(@users) do |format|
    format.json { render :json => @users, :callback => params[:callback]}
  end
end
Run Code Online (Sandbox Code Playgroud)

我有几种方法可以解决这个问题,但我无法弄清楚如何使它们工作:

  • 覆盖render(可能在应用程序控制器中),以便它接受:jsonp自动包含:callback => params[:callback]参数的选项.这样我可以将上面的代码更改为以下代码,这有点短:
def index
  @users = User.all
  respond_with(@users) do |format|
    format.json { render :jsonp => @users}
  end
end …
Run Code Online (Sandbox Code Playgroud)

jsonp ruby-on-rails dry respond-with ruby-on-rails-3

7
推荐指数
2
解决办法
5869
查看次数

Rails 3路由:包括带有根重定向的flash参数

在Rails 3中,您可以设置根路径以从config/routes.rb重定向到其他位置:

root :to => redirect("/dashboard")
Run Code Online (Sandbox Code Playgroud)

这有效,除了它消除了传递给root的任何flash参数.你怎么能通过重定向传递它们?

更新: James Chen的解决方案,即重写路线声明root :to => redirect { |p, req| req.flash.keep; "/dashboard" },对我有用.但有两件事我不明白:

  1. 什么p代表,params?
  2. 我尝试使用do/ end和换行符重写块:

    root :to => redirect do |p, req|
      req.flash.keep
      "/dashboard"
    end
    
    Run Code Online (Sandbox Code Playgroud)

    但这失败了"ArgumentError:不支持重定向参数".为什么是这样?

redirect routing ruby-on-rails ruby-on-rails-3

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