这是在这个先前的问题之后得到回答的.我实际上发现我可以从该查询中删除一个连接,所以现在工作查询是
start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true]
Run Code Online (Sandbox Code Playgroud)
这似乎有效.但是,当我尝试将这些DeckCards移动到另一个关联时,我得到ActiveRecord :: ReadOnlyRecord错误.
这是代码
for player in @game.players
player.tableau = Tableau.new
start_card = start_cards.pop
start_card.draw_pile = false
player.tableau.deck_cards << start_card # the error occurs on this line
end
Run Code Online (Sandbox Code Playgroud)
和相关的模特(画面是桌上的球员卡)
class Player < ActiveRecord::Base
belongs_to :game
belongs_to :user
has_one :hand
has_one :tableau
end
class Tableau < ActiveRecord::Base
belongs_to :player
has_many :deck_cards
end
class DeckCard < ActiveRecord::Base
belongs_to :card
belongs_to :deck …Run Code Online (Sandbox Code Playgroud) 我想知道如何使用以下内容解析YAML文件:
---
javascripts:
- fo_global:
- lazyload-min
- holla-min
Run Code Online (Sandbox Code Playgroud)
目前我正在尝试以这种方式解析它:
@custom_asset_packages_yml = (File.exists?("#{RAILS_ROOT}/config/asset_packages.yml") ? YAML.load_file("#{RAILS_ROOT}/config/asset_packages.yml") : nil)
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global'].each{ |script|
script
}
}
end
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用,并给我一个错误,值为零.
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Run Code Online (Sandbox Code Playgroud)
如果我尝试这个,它会输出整个字符串(fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
Run Code Online (Sandbox Code Playgroud) 我需要将gems升级到1.8我尝试安装相应的debian软件包,但它似乎没有升级
anujm@test:~$ dpkg -l |grep -i rubygem
ii rubygems 1.3.5-1ubuntu2 package management framework for Ruby libraries/applications
ii rubygems-lwes 0.8.2-1323277262 LWES rubygems
ii rubygems1.8 1.3.5-1ubuntu2 package management framework for Ruby libraries/applications
ii rubygems1.9 1.3.5-1ubuntu2 package management framework for Ruby libraries/applications
anujm@test:~$
anujm@test:~$ gem
gem gem1.8 gem1.9
anujm@test:~$ sudo gem1.8 install serve
ERROR: Error installing serve:
multi_json requires RubyGems version >= 1.3.6
anujm@test:~$
Run Code Online (Sandbox Code Playgroud) 我正在使用Pry和我的Rails应用程序.我binding.pry在我的模型中设置了一个循环来尝试调试问题.例如:
(1..100).each do |i|
binding.pry
puts i
end
Run Code Online (Sandbox Code Playgroud)
当我输入时quit,它会进入下一次迭代并再次停止.有没有办法走出循环所以我不必输入quit100次?
目前,我知道如何摆脱它的唯一方法是使用CTRL+ C并重新启动应用程序.
用简单的哈希就很容易了
{:a => "a", :b => "b"}
Run Code Online (Sandbox Code Playgroud)
这将转化为
"a=a&b=b"
Run Code Online (Sandbox Code Playgroud)
但你如何处理更复杂的事情呢?
{:a => "a", :b => ["c", "d", "e"]}
Run Code Online (Sandbox Code Playgroud)
这应该转化为
"a=a&b[0]=c&b[1]=d&b[2]=e"
Run Code Online (Sandbox Code Playgroud)
或者更糟糕的是,(做什么)有类似的事情:
{:a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}]
Run Code Online (Sandbox Code Playgroud)
感谢非常感谢的帮助!
当我遇到一些真实性令牌问题时,我正在研究一个新的Rails 4应用程序(在Ruby 2.0.0-p0上).
在编写响应json的控制器时(使用respond_to类方法),当我尝试使用创建记录时,我create开始ActionController::InvalidAuthenticityToken尝试异常curl.
我确定我设置-H "Content-Type: application/json"并设置数据,-d "<my data here>"但仍然没有运气.
我尝试使用Rails 3.2(在Ruby 1.9.3上)编写相同的控制器,并且我没有任何真实性令牌问题.我四处搜索,看到Rails 4中的真实性令牌发生了一些变化.据我所知,它们不再自动插入表格了?我想这会以某种方式影响非HTML内容类型.
有没有办法解决这个问题,而无需请求HTML表单,抢夺真实性令牌,然后使用该令牌发出另一个请求?还是我完全错过了一些非常明显的东西?
编辑:我刚尝试使用脚手架在新的Rails 4应用程序中创建一个新记录而不改变任何东西,我遇到了同样的问题所以我想这不是我做的事情.
如何从Rails应用程序中的Date对象获取UNIX时间戳(自格林威治标准时间1970年以来的秒数)?
我知道Time#to_i返回一个时间戳,但是执行Date#to_time然后获取时间戳会导致大约一个月的时间(不知道为什么......).
任何帮助表示赞赏,谢谢!
编辑:好的,我想我想出来了 - 我在一个循环中多次处理一个日期,每次由于时区不匹配而移动一点日期,最终导致我的时间戳缩短一个月.不过,我仍然有兴趣知道是否有任何方法可以不依赖于此Date#to_time.
您如何称呼->运营商,如下所示?
->(...) do
...
end
Run Code Online (Sandbox Code Playgroud)这些片段不是等效的吗?
succ = ->(x) {x + 1}
succ = lambda {|x| x + 1}
Run Code Online (Sandbox Code Playgroud)