小编spi*_*ann的帖子

rails redirect_to:返回不工作

我正在尝试使用以下内容:

class PaymentsController < ApplicationController

  def addproduct
     (session[:products] ||= []) << params[:item]
     redirect_to :back
  end

 end
Run Code Online (Sandbox Code Playgroud)

我有这个例外:

undefined method `back_url' for #<PaymentsController:0x007ff682c467a8>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

ruby redirect ruby-on-rails

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

Rails中的大小,长度和计数

1.9.3p194 :002 > u = User.find_by_email("email@mail.ru")
1.9.3p194 :005 > u.addresses.size
 => 1 
1.9.3p194 :006 > u.addresses.length
 => 1 
1.9.3p194 :007 > u.addresses.count 
Run Code Online (Sandbox Code Playgroud)

Rails 3.2.3中的大小,长度和计数没有区别,不是吗?

ruby ruby-on-rails

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

为什么在私有部分中声明委托方法是公开的?

我可以通过将声明放在一个部分中来使attr_reader(和相关的attr_writerattr_accessor)方法私有化private:

class Foo
private
  attr_reader :b
end

Foo.new.b # => NoMethodError: private method `b' called for #<Foo:>
Run Code Online (Sandbox Code Playgroud)

但是,Rails' delegate和Ruby标准库def_delegate不能以这种方式工作.这些委托方法始终是公开的.

class Foo
  attr_reader :b
  def initialize
    @b = 'b'
  end
end

require 'forwardable'
class Bar
  attr_reader :foo
  def initialize
    @foo = Foo.new
  end
  extend Forwardable
private
  def_delegator :foo, :b
end

Bar.new.b # => "b"
Run Code Online (Sandbox Code Playgroud)

通过将委托更改为以下内容,可以轻松完成委托授权:

private def_delegator :foo, :b
Run Code Online (Sandbox Code Playgroud)

但我预计会NoMethodError出现Bar.new.b上述错误.为什么代表团不私有?

def_delegator(别名for def_instance_delegator)的方法定义就是rescue(删除了块): …

ruby delegates metaprogramming ruby-on-rails

15
推荐指数
1
解决办法
660
查看次数

为什么Ruby调试器返回的值不同于运行时的代码?

看到这个简单的Ruby类:

require 'byebug'

class Foo
  def run
    byebug

    puts defined?(bar)
    puts bar.inspect

    bar = 'local string'

    puts defined?(bar)
    puts bar.inspect
  end

  def bar
    'string from method'
  end
end

Foo.new.run
Run Code Online (Sandbox Code Playgroud)

运行此类时,可以在调试器的控制台中观察到以下行为:

    $ ruby byebug.rb

    [2, 11] in /../test.rb
        2:
        3: class Foo
        4:   def run
        5:     byebug
        6:
    =>  7:     puts defined?(bar)
        8:     puts bar.inspect
        9:
       10:     bar = 'local string'
       11:
Run Code Online (Sandbox Code Playgroud)

在断点处,调试器返回以下值:

    (byebug) defined?(bar)
    "local-variable"
    (byebug) bar.inspect
    "nil"
Run Code Online (Sandbox Code Playgroud)

请注意 - 尽管调试器的断点符合要求#5- 它已经知道将bar在行#10中定义一个局部变量,该局部变量将影响该方法bar,并且调试器实际上不再能够调用该 …

ruby debugging binding byebug

15
推荐指数
1
解决办法
352
查看次数

赛璐珞宝石安装出错

最近我更新了我的rails版本4.2.3和ruby版本 ruby-2.2.3.在我捆绑之后,它会出现以下错误:

$ bundle
Fetching gem metadata from http://rubygems.org/..........
Fetching version metadata from http://rubygems.org/...
Fetching dependency metadata from http://rubygems.org/..
Could not find celluloid-0.16.1 in any of the sources
Run Code Online (Sandbox Code Playgroud)

你可以帮帮我吗?

ruby bundler celluloid

10
推荐指数
1
解决办法
2129
查看次数

Rails之间的差异引发StandardError.new'和'raise StandardError'

为了处理Rails异常,我看到人们"提出SomeException.new"或"提出SomeException",有什么区别?

如果我有课,请说

 class UnableToCreateShipments < StandardError; end
Run Code Online (Sandbox Code Playgroud)

我可以两个都做吗?

raise UnableToCreateShipments
raise UnableToCreateShipments.new
Run Code Online (Sandbox Code Playgroud)

或者留言

raise UnableToCreateShipments, 'my error message'
raise UnableToCreateShipments.new('my error message')
Run Code Online (Sandbox Code Playgroud)

ruby

7
推荐指数
1
解决办法
4185
查看次数

ruby中的过程和数据抽象

我是Ruby的新手.我正在学习ruby中的抽象原理.我理解过程抽象是隐藏用户的实现细节,或者只是专注于基本要素而忽略细节.

我关心的是如何实现它

1)这是一个简单的函数调用就像这样

# function to sort array
# @params array[Array] to be sort

def my_sort(array)
  return array if array.size <= 1

  swapped = false
  while !swapped
    swapped = false
    0.upto(array.size-2) do |i|
      if array[i] > array[i+1]
        array[i], array[i+1] = array[i+1], array[i]
        swapped = true
      end
    end
  end

  array
end
Run Code Online (Sandbox Code Playgroud)

并且这样打电话

sorted_array = my_sort([12,34,123,43,90,1])
Run Code Online (Sandbox Code Playgroud)

2)数据抽象与封装有何不同

据我所知,Data Abstraction只是隐藏了其他类的一些成员数据.

ruby oop abstraction

6
推荐指数
2
解决办法
3082
查看次数

NameError 未初始化常量 Model::Object

我是 ruby​​ on Rails 的新手。我的错误是

NameError in ReviewsController#create
uninitialized constant User::Review
Extracted source:
    @review = current_user.reviews.build(review_params)
Run Code Online (Sandbox Code Playgroud)

我在其他堆栈溢出问题上读到,通常是错误名称或忘记belongs_to或has_many的错误,但我相信我已经正确设置了关系。我正在使用 gem 设备来处理用户并登录/注册等

评论.rb

class Reviews < ActiveRecord::Base

  belongs_to :user
    belongs_to :renters

end
Run Code Online (Sandbox Code Playgroud)

用户.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :reviews
end
Run Code Online (Sandbox Code Playgroud)

评论_Controller.rb

class ReviewsController < ApplicationController
  before_action :set_renter
  before_action :authenticate_user!

  def new
    @review = Reviews.new(renters: @renter)
  end

  def create
    @review = current_user.reviews.build(review_params)
    @review.renter = @renter
    @review.save 
    redirect_to @renter 
  end

  private
    def set_renter
      @renter = Renters.find(params[:renter_id])
    end

    def …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails nameerror devise uninitialized-constant

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

String#拆分奇怪的行为

我观察了一个奇怪的split方法行为String.

"1..2".split('..')      # => ['1', '2']
"1..2".split('..', 2)   # => ['1', '2']

"..2".split('..')       # => ['', '2']
"..2".split('..', 2)    # => ['', '2']
Run Code Online (Sandbox Code Playgroud)

一切都像预期,但现在:

"1..".split('..')       # => ['1']
"1..".split('..', 2)    # => ['1', '']
Run Code Online (Sandbox Code Playgroud)

我希望第一个与第二个相同.

有没有人有一个很好的解释,为什么只"1..".split('..')返回一个只有一个元素的数组?或者它是Ruby的不一致?你觉得怎么样?

ruby

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

bundler安装获取"i18n需要Ruby版本> = 1.9.3"

我怎么能纠正这个"i18n需要Ruby版本> = 1.9.3"我在运行"bundler install"时得到了什么?

背景:需要在dreamhost上使用ruby 1.8.7,因此针对此确定了Rails v3.2.

命令行

Gregs-MacBook-Pro:weekends Greg$ ruby -v
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin14.1.0]

Gregs-MacBook-Pro:weekends Greg$ bundler -v
Bundler version 1.9.2

Gregs-MacBook-Pro:weekends Greg$ bundler install
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies............
Using rake 10.4.2
Gem::InstallError: i18n requires Ruby version >= 1.9.3.
An error occurred while installing i18n (0.7.0), and Bundler cannot continue.
Make sure that `gem install i18n -v '0.7.0'` succeeds before bundling.
Gregs-MacBook-Pro:weekends Greg$ …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails bundler rails-i18n

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