小编pez*_*ser的帖子

在特定时间您可能需要重新启动Webrick以查看更改,这是否正确?

我听说Kevin Skoglund(lynda.com)说,养成在开发过程中频繁重启Webrick的习惯是一种好习惯.虽然通常您不需要重新启动Webrick来查看您的更改,但他暗示有时可能需要这样做?有谁知道这些情况可能是什么?这让奇怪Webrick是否有点脆弱.

development-environment ruby-on-rails restart webrick

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

rake db:schema:dump不提供数据迁移信息 - 是否有自动获取方法?

rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)

此命令为您提供遗留数据库的模式,您可以从生成的模式中为该数据库构建迁移.

但是如果该数据库中包含数据,那么如果有一个rake命令来检索Rails生成的迁移文件中的数据,那就太好了.

也许我在做梦 - 可能要求Rails可以查看遗留数据库中的数据,并从现有数据中为您构建迁移,这可能要求太多 - 如下所示:

class LoadDefaultData < ActiveRecord::Migration
  def self.up
    bopeep = User.find_by_username 'bopeep'
    BlogPost.create(:title => 'test', :content => 'test', :author_id => bopeep.id, :status => 'ok')
  end

  def self.down
  end
end
Run Code Online (Sandbox Code Playgroud)

或者有办法吗?

migration activerecord ruby-on-rails

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

计数器缓存不会更新,但我可以保存到父级和子级

我添加了一个计数器缓存但无法让它更新.但我可以通过添加新的博客帖子来更新父级 - 博客文章模型 - 我可以通过添加新评论来更新孩子 - 评论模型.计数器缓存应该通过自动更新blog_posts.comments_count字段来跟踪每篇博文的评论总数.我将概述我经历的一些步骤,希望有人会注意到我做错了什么.架构转储结束.

我有一个Blog Post模型:

class Post < ActiveRecord::Base
  set_table_name("blog_posts")
  belongs_to :author, :class_name => "User", :foreign_key => 'author_id'
  has_many :comments, :class_name => "Comment",
    :foreign_key => 'post_id', :order => "created_at desc", :dependent => :destroy
  has_many :categorizations
  has_many :categories, :through => :categorizations
  named_scope :recent, :order => "created_at desc", :limit => 5

end
Run Code Online (Sandbox Code Playgroud)

以及将counter_cache设置为post模型的Comments模型:

class Comment < ActiveRecord::Base
  belongs_to :post, :class_name => "Post", :foreign_key => "post_id", :counter_cache => true
  belongs_to :author, :class_name => "User", :foreign_key => "author_id"
end
Run Code Online (Sandbox Code Playgroud)

我创建了一个迁移,将counter_cache列添加到blog_posts表中: …

ruby-on-rails counter-cache

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

不确定定义我的find方法的位置(模型或控制器)

(警告:Clueless Rails Newbie!)

在我的专辑视图的show.html.erb中,我在相册控制器中调用了一个公共方法:

<% albums_feature = find_albums_with_feature(feature.id) %>
Run Code Online (Sandbox Code Playgroud)

它会生成NoMethodError.

所以我将方法复制到我的Album模型中并尝试从视图中调用它:

<% albums_feature = Album.find_albums_with_feature(feature.id) %>
Run Code Online (Sandbox Code Playgroud)

但这也会得到一个NoMethodError.

我应该在哪里定义这种方法?

对于它的价值,该方法如下所示:

  def find_albums_with_feature(feature_id)
    albums_for_feature = Albums.find_by_sql(  
    ["select al.* from albums al, albums_features alfe
    where al.id = alfe.album_id
    and alfe.feature_id = ?", feature_id])
  end
Run Code Online (Sandbox Code Playgroud)

ruby controller model ruby-on-rails

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

Ruby方法instance_eval()和send()是否否定了私有可见性的好处?

w = Widget.new # Create a Widget
w.send :utility_method # Invoke private method!
w.instance_eval { utility_method } # Another way to invoke it
w.instance_eval { @x } # Read instance variable of w
Run Code Online (Sandbox Code Playgroud)

查看上面与Widget类(下面)相关的示例,send和instance_eval方法违反了私有和受保护可见性提供的所有保护.如果是这样,为什么要在Ruby中使用私有和受保护的访问权限,因为无法保证您的定义能够得到尊重?

class Widget
  def x # Accessor method for @x
   @x
  end
  protected :x # Make it protected
  def utility_method # Define a method
   nil
  end
  private :utility_method # And make it private
end
Run Code Online (Sandbox Code Playgroud)

ruby visibility access-specifier

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

如何影响Ruby代码的加载顺序?

假设您的同事monkeypat修复Fixnum类并重新定义+方法以减去而不是添加:

class Fixnum
  def +(x)
    self - x
  end
end

>> 5 + 3
=> 2
Run Code Online (Sandbox Code Playgroud)

您的问题是您想要访问+方法的原始功能.因此,您将此代码放入相同的源文件之前.它在将 monkeypatches 之前将+方法别名为"original_plus" .

class Fixnum
  alias_method :original_plus, :+
end

class Fixnum
  def +(x)
    self - x
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过original_plus访问+方法的原始功能

>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8
Run Code Online (Sandbox Code Playgroud)

但我需要知道的是:

有没有其他方法加载这个别名BEFORE他的monkeypatch加载除了将其粘贴到他修改的相同源文件中?

我的问题有两个原因:

  1. 我可能不希望他知道我已经这样做了
  2. 如果源文件被更改以使别名最终低于monkeypatch,则别名将不再产生所需的结果.

ruby monkeypatching

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

在Rails迁移中加载数据

我创建了一些从Posts表的定义开始的迁移.

class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.column "title", :string, :limit => 100, :default => "",  :null => false
      t.column "content", :text, :null => false
      t.column "author", :string, :limit => 100, :default => 0,  :null => false
      t.column "category", :string, :limit => 20, :default => "",  :null => false
      t.column "status", :string, :limit => 20, :default => "",  :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table :posts
  end
end
Run Code Online (Sandbox Code Playgroud)

另一个用于Users表,在创建表后我为默认用户加载了一些数据.

class CreateUsers < ActiveRecord::Migration
  def …
Run Code Online (Sandbox Code Playgroud)

migration ruby-on-rails

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

在Ruby中,什么相当于Java在cowork情境中限制访问源的技术?

在Java中编译定义类的.java文件时,它会创建一个.class文件.如果您向同事提供这些类文件,则他们无法修改您的来源.您还可以将所有这些类文件捆绑到一个jar文件中,以便更整齐地将其打包并将其作为单个库分发.

当你想与你的同事分享你的功能但你不希望他们能够修改源代码时,Ruby是否有这些功能(除非他们要求你提供实际的.rb源文件并告诉你他们想要更改)?

ruby

0
推荐指数
1
解决办法
264
查看次数