Tag: 方法

编辑方法正在创建新记录,而不是仅更新现有记录

我的问题是:当我编辑个人资料页面时,如何让我的个人资料控制器的编辑/更新方法停止创建新记录? 我有一个用户模型和配置文件模型。 user has_one :profile 。 profile belongs_to :user 。 我的routes.rb看起来像这样:map.resources:users,:has_one =>:profile 当我的应用程序的访问者创建用户并点击提交时,他们将被定向到“创建个人资料”屏幕。 以下控制器创建一个配置文件,以便创建的配置文件URL为:localhost:3000 / users / [user_id] / profile def new @profile = `current_user.build_profile` end def create @profile = current_user.build_profile(params[:profile]) if @profile.save flash[:notice] = ‘Profile was successfully created.’ redirect_to user_profile_path else flash[:notice] = ‘Error. Something went wrong.’ render “new” end end 一切正常。 编辑配置文件时出现问题。 起初看起来很好。 […]

有耙子的问题

我正在运行Rails 3.1.1并在运行此命令时出现此错误。 显然是Rails的新手,任何帮助表示赞赏: 耙子流产了! nil的未定义方法“先决条件”:NilClass /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rspec-rails-2.6.0/lib/rspec/rails/tasks/rspec.rake:3:in `’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rspec-rails-2.6.0/lib/rspec-rails.rb:10:in `load’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rspec-rails-2.6.0/lib/rspec-rails.rb:10:in `block in ‘ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/railtie.rb:183:in `call’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/railtie.rb:183:in `block in load_tasks’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/railtie.rb:183:in `each’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/railtie.rb:183:in `load_tasks’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/engine.rb:396:in `block in load_tasks’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/application/railties.rb:8:in `each’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/application/railties.rb:8:in `all’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/engine.rb:396:in `load_tasks’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/application.rb:103:in `load_tasks’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.1.1/lib/rails/railtie/configurable.rb:30:in `method_missing’ /Users/220040168/rails_projects/sample_app/Rakefile:7:in `’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile’ /Users/220040168/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block […]

如何改进正则表达式以消除不必要的方法链接?

此函数方法接受一个数字并返回以逗号分隔的相同值,这是美国的常见惯例。 我可以让它与正则表达式一起工作的唯一方法是在表达式之前和之后反转字符串。 是否有正则表达式可以帮助我消除为方法function调用String#reverse两次的需要? def separate_comma(number) raise “You must enter a number.” if number.is_a?(Numeric) == false number.to_s.reverse.gsub(/(\d{3})(?=\d{1,3})/, “\\1,”).reverse end

将变量传递给’helper_method’

我正在使用Ruby on Rails 3.0.9,我想将一些变量传递给我的控制器中声明的helper_method 。 class ArticlesController < ApplicationController helper_method :method_name private def method_name # Here I would like to state\use something like 'def method_name(var1, var2)' … end end 可能吗? 如果是这样,我应该如何编码以及如何使用它?

获取在控制器/视图中工作的方法在模型中运行,Ruby on Rails

我正在尝试根据用户的位置向位置列下的用户模型添加字符串。 我已经完成了所有设置,我知道@ city + @ state的值被添加到正确模型中的相应列中。 问题是,似乎request.location.city和request.location.state在控制器和视图中正常运行,但在模型中却没有。 def add_location @city = request.location.city @state = request.location.state @location = @city+@state self.location = @location end 创建用户时,不会创建任何字符串,例如“losangelescalifornia”。 当我定义@city =“bob”和@state =“cat”时,所有创建的用户都在适当的位置有“bobcat”。 我知道除了这些基于地理定位的方法之外,一切都在运行。 所以我的问题是,如何在模型中运行这些方法(请纠正我,如果它不是它们),即request.location.city和request.location.state? 提前谢谢了 :)

使用find_by方法检索多个记录

以下方法适用于通过电子邮件发送令牌链接的用户并对其进行身份validation。 def login inv = Invitation.find_by(email: params[:email]) if inv && inv.authenticated?(:invitation, params[:id]) @organization = inv.organization unless @organization.nil? render ‘profiles/show’ and return else flash[:danger] = “Error” redirect_to root_path end else flash[:danger] = “Invalid link” redirect_to root_path end end 然而,这种方法似乎假设一个人( inv )只能在Invitation数据库中存在一次。 情况并非如此,同一个人/电子邮件地址可以在数据库中拥有多条记录。 因此,我需要重写方法来解决这种情况。 我怎样才能做到这一点? 我可以在下面第2行添加.each并使用.each吗? def login inv = Invitation.find_by(email: params[:email]).all if inv inv.each do |person| […]

在Ruby中object.method(a,b)和方法(a,b)之间有什么区别?

我是编程新手,我正在努力学习Ruby。 我现在无法理解方法。 我理解: 方法允许我执行一大块代码而不必重写它,这样的方法如下所示: example_method 参数允许我将值传递到方法中的代码中,该代码位于方法中定义的占位符的位置。 这样我就可以用不同的输入执行一组代码。 带参数的方法如下: example_method( x , y ) 但我对一个对象的方法实例化实际上在做什么感到困惑。 例如: object.example_method( x, y ) 这是什么意思? 为什么方法附加到具有句点符号的对象? 我们这样做是为了能在方法中引用对象的实例 / 类变量吗? 有没有其他理由这样做? 例如,如果: def example_method(x , y) x * y end object.exaple_method(a , b)是否与example_method(a , b) ? 感谢您的帮助,对不起,如果我不清楚的话。

ruby pickaxe书说attr_accessor是类方法

在ruby镐书中,有一条线说 attr_accessor是类Module中定义的类方法 但是attr_accessor不是实例方法吗? 我在这里错过了什么吗?

在别名实例方法时理解单例类

我正在使用Ruby 1.9.2和Ruby on Rails v3.2.2 gem。 我正在尝试以“正确的方式”学习元编程,此时我在RoR ActiveSupport::Concern模块提供的included do … end块中对实例方法进行别名: module MyModule extend ActiveSupport::Concern included do # Builds the instance method name. my_method_name = build_method_name.to_sym # => :my_method # Defines the :my_method instance method in the including class of MyModule. define_singleton_method(my_method_name) do |*args| # … end # Aliases the :my_method instance method in the […]

Ruby调用基于elseif语句的方法

所以我仍然在学习如何使用Ruby进行编码,而且我遇到了一些我很好奇的新东西。 我的老师刚开始教我们方法,我想知道你是否可以调用/创建一个基于if-else语句的方法。 例如,如果您有一个程序要求用户键入某人的名字,那么您可以使用该输入来决定使用哪种方法吗? 例: puts “Please enter name(Brian, Andy, Tod)” string = gets.to_i if string == “Brian” def b(string) puts “Hi Brian” return b elsif string == “Andy” def a(string) puts “Hi Andy” return a elsif string == “Tod” def t(string) puts “Hi Tod” return t else puts “Not a valid entry” end 我知道代码可能不起作用,我只是创建它以澄清我的意思,但实际上是否有办法做到这一点?