Tag: 方法

覆盖默认访问者时更新属性的麻烦

我正在使用Ruby on Rails 4,我用这种方式覆盖了一些默认的访问器方法: class Article < ActiveRecord::Base def title self.get_title end def content self.get_content end end self.get_title和self.get_content方法返回一些计算值,如下所示(注意: has_one_association是a :has_one ActiveRecord::Association ) def get_title self.has_one_association.title.presence || read_attribute(:title) end def get_content self.has_one_association.content.presence || read_attribute(:content) end 当我从数据库中找到并读取@article实例时,所有实例都按预期工作: title和content值分别使用self.has_one_association.title和self.has_one_association.content输出。 但是,我发现当属性分配给@article ,@ @article对象不会按预期更新。 也就是说,在我的控制器中,我有: def update # params # => {:article => {:title => “New title”, :content => “New […]

Ruby on Rails 3:如何分别检索POST和GET参数?

我知道你可以使用params获取参数,但问题是它合并了所有参数,无论它们是通过GET还是POST发送的: 如果您通过GET发送请求,没问题,参数只能在URL中挤压。 但是如果你发送一个像/blabla?foo=bar&foo2=bar2这样的URL的POST请求,有没有办法告诉通过URL发送的变量和通过实际POST方法发送的变量之间的区别?

如何计算方法中的方法

如果我们创建一个名为days_left_in_current_level的新方法,那么我们需要在那里放一些,以便我们可以计算current_level中剩余的天数? habit.rb def current_level return 0 unless date_started def committed_wdays committed.map do |day| Date::ABBR_DAYNAMES.index(day.titleize) end end def n_days ((date_started.to_date)..Date.today).count do |date| committed_wdays.include? date.wday end – self.real_missed_days end case n_days # 1 – 6 represent the different levels when 0..9 1 when 10..24 2 when 25..44 3 when 45..69 4 when 70..99 5 else 6 end […]

如何将Ruby函数放入SQLite3查询中?

我有一个函数,我需要将其放入SQLite3查询中。 我有以下方法: def levenshtein(a, b) case when a.empty? then b.length when b.empty? then a.length else [(a[0] == b[0] ? 0 : 1) + levenshtein(a[1..-1], b[1..-1]), 1 + levenshtein(a[1..-1], b), 1 + levenshtein(a, b[1..-1])].min end end 我想做一个看起来像这样的查询: @results = The_db.where(‘levenshtein(“name”, ?) < 3', '#{userinput}') 我想在The_db中找到name的值,其中name列的值与用户输入之间的编辑距离小于3 。 问题是我不知道如何在查询中使用Ruby函数。 这有可能吗?

Rails.env在Rails 2中未定义

我有一个运行Ruby on Rails 2.2的旧应用程序,我无法使用gem来工作,因为它无法使用Rails.env找到当前环境: $ script/console >> Rails.env NoMethodError: undefined method `env’ for Rails:Module from (irb):1 gem定义为在定义Rails时使用Rails.env ,而在不定义时使用RAILS_ENV 。 但我似乎有一个没有env方法的Rails对象(即使我读过Rails 2中添加了该方法)。 知道发生了什么事吗?

导轨型号

我有一个名为test.rb的模型,当我在我的控制器中使用@ tests = Test.new时,我得到以下错误。 有人可以解决这个问题吗? “测试的未定义方法`new’:模块”

我应该如何将alias_method_chain用于构建方法?

我正在使用Ruby on Rails 3.2.13,我想正确使用alias_method_chain :build, :option_name语句,因为我收到一个奇怪的错误。 那是, … …在我的控制器文件中我有: class Articles::CommentsController < ApplicationController def create @articles_comment = @article.comments.build(params[:comment]) … end end …在我的模型文件中我有: class Articles::Comment < ActiveRecord::Base def self.build_with_option_name … end alias_method_chain :build, :option_name end 当我运行create控制器操作时,我在日志中收到以下错误: ActionController::RoutingError (undefined method `build’ for class `Articles::Comment’): app/models/articles/comment.rb:5:in `’ 我应该如何将alias_method_chain用于build方法? 或者,也许更好,我应该以另一种方式来达到我想要做的事情(例如,我应该覆盖Articles::Comment模型中的build方法而不是使用alias_method_chain )吗? 注意I :我不知道它是否有帮助,但build方法是指一个关联( @article.comments )。 更多,我没有在Articles::Comment模型中声明build方法,因为它应该由Ruby on Rails框架本身“添加”/“附加”到类(我认为它是通过元编程实现的)。 注2 […]

为什么我得到错误nil的未定义方法`name’:使用Ruby on Rails的NilClass?

我认为名称和电子邮件等方法在rails中是默认的吗? 在我的静态页面视图中,在profile.html.erb中,我有: 我输入了static_page_controller def profile @user = User.find_by_remember_token(:remember_token) end 当我转到控制台User.find_by_remember_token(“actualtoken”)。name返回适当的用户名,但是:remember_token没有。 我如何制作:remember_token =登录用户记住令牌? 在我的sessions_helper中,我有 def log_in(user) cookies.permanent[:remember_token] = user.remember_token current_user = user end def logged_in? !current_user.nil? end def current_user=(user) @current_user = user end def current_user @current_user ||= user_from_remember_token end def log_out current_user = nil cookies.delete(:remember_token) end private def user_from_remember_token remember_token = cookies[:remember_token] User.find_by_remember_token(remember_token) unless remember_token.nil? end […]

Rails:将争论传递给关注者

DHH撰写了一篇主张使用问题的文章 。 这似乎是一种很好的做法,在很多情况下,它们与我的应用程序配合得很好。 但是,有几种情况下,多个模型具有相似但略有不同的方法,例如: def find_or_create_membership user_membership = User::Membership.where(:group_id => self.group_id, :user_id => self.invitee_id).first_or_create(:status => “invited”) end 和: def find_or_create_membership user_membership = User::Membership.where(:group_id => self.group_id, :user_id => self.invitee_id).first_or_create(:status => “declined”) end 这些方法是相同的,除了第一个将status设置为“邀请”而第二个设置为“拒绝”。 有没有办法通过关注点将参数传递给这些方法?

获取要使用的表单:method =>:delete(rails)

我有一个包含许多line_items的购物车。 我希望每个订单项旁边都有一个“删除”按钮,点击该按钮后会从购物车中删除line_item。 我知道我可以使用button_to方法执行此操作,但我想使用form_for,因为我想同时更改line_item的父对象的属性(每个line_item也属于一个课程,我会喜欢告诉课程的父母,它不再在购物车中)。 这是我使用form_for的代码: :delete, :remote => true) do |f| %> “Delete” %> ruby文档说只需添加:method =>:delete应该可以工作(http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for),但渲染的html不是完全正确。 它仍然是 但它应该是: 我究竟做错了什么?