小编Bac*_*cko的帖子

如何设置"动态"变量值?

我正在使用Ruby on Rails 3.0.9,我试图"动态"设置一些变量值.那是...

...在我的模型文件中我有:

attr_accessor :variable1, :variable2, :variable3


# The 'attributes' argument contains one or more symbols which name is equal to 
# one or more of the 'attr_accessor' symbols.

def set_variables(*attributes)

  # Here I should set to 'true' all ":variable<N>" attributes passed as symbol
  # in the 'attributes' array, but variable names should be interpolated in a 
  # string.
  # 
  # For example, I should set something like "prefix_#{':variable1'.to_s}_suffix".

end
Run Code Online (Sandbox Code Playgroud)

如何将这些变量值设置为true


我尝试使用该self.send(...)方法,但我没有成功(但是,可能,我不知道如何使用该send方法...是否可以通过使用该 …

ruby variables metaprogramming ruby-on-rails ruby-on-rails-3

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

渴望加载:正确的做事方式

我正在运行Ruby on Rails 3.1.我阅读了以下有关急切加载的文章和文档,我想找到一种正确的方法来做事:

  1. 渴望加载协会 [官方文档]
  2. ActiveRecord :: Associations :: ClassMethods(参见"渴望加载关联")[官方文档]
  3. 渴望加载 [博客文章]

#2说:

请注意,使用Post.includes([:author,:comments])等条件.其中(['comments.approved =?',true]).all可能会产生意想不到的后果.

#3说,这些意想不到的后果是:(:例子是很相同的,所以我引用的博客文章中的确切文本,但你必须记住的解决办法,而不是具体实现):

此查询,因为它将使用LEFT JOIN,也会丢弃所有帖子,而不会在其任何评论上添加带有"first"字样的评论.

也就是说,如果存在非"关联"对象,则不会加载"主关联"对象.当我尝试通过添加一些条件(.where(:category_relationships => {:user_id => @current_user.id})之前的问题中)来尝试使用预先加载时会发生这种情况,但我不希望这种情况发生.

所以(失败主义者,因为我可能无法在我的情况下使用急切的加载,其中条件无法在has_many声明中设置- 请注意,在上面的代码中,@current_user.id"动态设置"与提及的网站中的示例不同),我想知道是否存在pratiques /技术/策略以限制数据库查询,因为我有"N + 1问题".

也许这些pratiques /技术/策略可以通过使用Ruby on Rails框架来实现...... #1说:

即使Active Record允许您像加入一样指定热切加载关联的条件,但推荐的方法是使用联接.

什么以及如何以正确的方式解决这个问题?


也许一个解决方案是通过运行特定的和分离的数据库查询来检索和构建自己需要加载的内容,但问题是如何将"检索到的""关联"对象"传递"/"关联"/"插入"到"主要关联的"对象,以便那些可以使用"一个là急切加载"的方式?也就是说,如何使用(请参阅上述问题以获取更多信息)使用类似的代码@article.comments并获得我自己急于加载的评论?在急切加载之后,是否有可能/正确地将@article.comments = …

ruby database ruby-on-rails eager-loading ruby-on-rails-3

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

'after_filter'如何/何时运行/运行?

我正在使用Ruby on Rails 3.1,我想知道(出于性能原因)是否after_filter渲染了该视图文件之后的运行.也就是说,当用户访问我的应用程序URL时,他/她应该显示的相关视图文件after_filterafter_filter运行之前呈现,或者在呈现视图文件之前运行?

换句话说,应用程序服务器在运行之前开始将呈现的视图数据发送给用户,after_filter或者它等待运行该after_filter方法,然后才发送该视图数据?

PS:我打开了这个问题,因为我想运行一些系统更新(注意:这些更新不会影响视图输出数据,并且不会"视图"/"必要"用于视图)而不会影响结束用户体验(例如:缓慢加载我的应用程序网页).

ruby performance ruby-on-rails filter ruby-on-rails-3

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

如何使用Python从文件中检索的JSON数据添加键值?

我是Python新手,我正在玩JSON数据.我想从文件中检索JSON数据,并在"动态"中向该数据添加JSON键值.

也就是说,我json_file包含JSON数据,如下所示:

{"key1": {"key1A": ["value1", "value2"], "key1B": {"key1B1": "value3"}}}
Run Code Online (Sandbox Code Playgroud)

我想将"ADDED_KEY": "ADDED_VALUE"键值部分添加到上面的数据中,以便在我的脚本中使用以下JSON:

{"ADDED_KEY": "ADDED_VALUE", "key1": {"key1A": ["value1", "value2"], "key1B": {"key1B1": "value3"}}}
Run Code Online (Sandbox Code Playgroud)

我想写一些像以下内容,以完成上述事情:

import json

json_data = open(json_file)
json_decoded = json.load(json_data)

# What I have to make here?!

json_data.close()
Run Code Online (Sandbox Code Playgroud)

python json file

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

如何处理ActiveModel的翻译?

我正在使用Rails 3.1.1,我想正确翻译错误消息ActiveModel.我不知道是否覆盖i18n_scope是解决问题的正确方法(或者有其他方法),但官方文档说:

i18n_scope()

返回类的i18n_scope.如果要自定义查找,请覆盖.

...... 我该如何过度加重i18n_scope

这时我得到以下"警告":

# Note the 'activemodel' part
translation missing: de.activemodel.errors.models.my_class.attributes.message.blank

# I would like to "map" translations to 'de.activerecord.errors.messages.blank'
# as made for all other ActiveRecord classes in my application
Run Code Online (Sandbox Code Playgroud)

我的ActiveModel班级如下:

class MyClass
  include ActiveModel::Conversion
  include ActiveModel::Validations
  include ActiveModel::Dirty
  extend  ActiveModel::Naming
  extend  ActiveModel::Translation

  validates :name, :presence => true

  ...
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails internationalization ruby-on-rails-3 ruby-on-rails-3.1

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

有一种方法可以同样处理`after_save`和`after_destroy`"吗?

我正在使用Rails 3.1.0,我想知道是否可以"同等" 地处理after_saveafter_destroy回调.也就是说,我需要为两者after_saveafter_destroy回调运行相同的方法.

此时我必须单独处理这些回调,即使这些回调完成了同样的事情:

after_save do |record|
  # Make a thing
end

after_destroy do |record|
  # Make the same thing as in the 'after_save' callback
end
Run Code Online (Sandbox Code Playgroud)

那么,有一种方法可以处理after_saveafter_destroy"平等"吗?

ruby ruby-on-rails callback ruby-on-rails-3 ruby-on-rails-3.1

12
推荐指数
3
解决办法
7354
查看次数

如何解决"[BUG]分段故障"?

我使用的是运行Snow Leopard 10.6.8和RVM 1.10.3,Ruby 1.9.3-p125,Ruby on Rails 3.2.2和rspec-rails-2.8.1的Mac OS.我已经正确安装并配置了所有宝石,但是在终端窗口中我运行rake spec命令我得到以下内容:

$ rake spec
/<ABSOLUT_PATH>/.rvm/gems/ruby-1.9.3-p125/gems/yard-0.7.5/lib/yard/cli/command.rb:10: [BUG] Segmentation fault
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin10.8.0]

-- Control frame information -----------------------------------------------
c:0045 p:0011 s:0136 b:0136 l:000135 d:000135 CLASS  /<ABSOLUT_PATH>/.rvm/gems/ruby-1.9.3-p125/gems/yard-0.7.5/lib/yard/cli/command.rb:10
c:0044 p:0011 s:0134 b:0134 l:000133 d:000133 CLASS  /<ABSOLUT_PATH>/.rvm/gems/ruby-1.9.3-p125/gems/yard-0.7.5/lib/yard/cli/command.rb:4
c:0043 p:0021 s:0132 b:0132 l:000131 d:000131 TOP    /<ABSOLUT_PATH>/.rvm/gems/ruby-
1.9.3-p125/gems/yard-0.7.5/lib/yard/cli/command.rb:3
c:0033 p:0220 s:0104 b:0104 l:0020f0 d:0020f0 TOP    /<ABSOLUT_PATH>/.rvm/gems/ruby-1.9.3-p125/gems/yard-0.7.5/lib/yard.rb:57
c:0032 p:---- s:0101 b:0101 l:000100 d:000100 FINISH
c:0031 p:---- s:0099 b:0099 l:000098 d:000098 CFUNC  :require
c:0030 p:0026 …
Run Code Online (Sandbox Code Playgroud)

ruby macos rspec ruby-on-rails rspec-rails

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

是否有可能在`之前'添加一个`before(:each)`钩子,以便所有spec文件都可以运行它?

我正在使用Ruby on Rails 3.2.2和rspec-rails-2.8.1.为了使我的规范文件DRY(不要重复自己)和种子test数据库,我想before(:each)为所有这些规范文件运行一个钩子.也就是说,在我的所有spec文件中,我有以下代码:

describe 'test description' do
  before(:each) do
    load "#{Rails.root}/db/seeds.rb"
  end

  ...
end
Run Code Online (Sandbox Code Playgroud)

是否可以添加before(:each)钩子的"某处",以便所有规范文件都可以运行它? 你有什么建议?

ruby hook rspec ruby-on-rails ruby-on-rails-3

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

FactoryGirl关联模型故障:"SystemStackError:堆栈级别太深"

我正在使用Ruby on Rails 3.0.9,RSpec-rails 2和FactoryGirl.我试图陈述一个工厂协会模型,但我遇到了麻烦.

我有一个factories/user.rb如下文件:

FactoryGirl.define do
  factory :user, :class => User do
    attribute_1
    attribute_2
    ...

    association :account, :factory => :users_account, :method => :build, :email => 'foo@bar.com'
  end
end
Run Code Online (Sandbox Code Playgroud)

和以下factories/users/account.rb文件:

FactoryGirl.define do
  factory :users_account, :class => Users::Account do
    sequence(:email) {|n| "foo#{n}@bar.com" }
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

上面的示例在我的spec文件中按预期工作,但如果factory :users_account语句中我添加了association :user代码,那么

FactoryGirl.define do
  factory :users_account, :class => Users::Account do
    sequence(:email) {|n| "foo#{n}@bar.com" }
    ...
    association      :user
  end
end
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Failure/Error: Unable to …
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails ruby-on-rails-3 factory-bot

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

如何随机化`ActiveRecord :: Relation`的数组元素位置?

我on Rails的3.2.2运行Ruby和我想随机数组元素的位置ActiveRecord::Relation.

我怎样才能做到这一点?

ruby random activerecord ruby-on-rails ruby-on-rails-3

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