我想使用find_or_create_by,但是这个语句不起作用.它不与其他属性"查找"或"创建".
productproperty = ProductProperty.find_or_create_by_product_id(:product_id => product.id, :property_id => property.id, :value => d[descname])
Run Code Online (Sandbox Code Playgroud)
似乎很少或没有关于在Rails 3中使用动态查找器的信息."和" - 这些一起给了我一个未知的方法错误.
更新:
最初我无法让以下工作.请假设我不是白痴,"产品"是产品AR模型的一个实例.
product.product_properties.find_or_create_by_property_id_and_value(:property_id => 1, :value => "X")
Run Code Online (Sandbox Code Playgroud)
错误方法是:
no such keys: property_id, value
Run Code Online (Sandbox Code Playgroud)
我无法理解这一点.只有今天早上我找到了传递这样的值的引用:
product.product_properties.find_or_create_by_property_id_and_value(1, "X")
Run Code Online (Sandbox Code Playgroud)
瞧,它运作正常.我原本希望哈希在相同的情况下工作,但我猜不是.
如果你错过互联网上的某些内容,我想你会得到一次投票?
我想运行一个Rake任务,要求用户输入.
我知道我可以在命令行上提供输入,但是我想询问用户是否确定他们想要继续执行特定操作,以防他们错误输入提供给Rake任务的其中一个值.
可能重复:
Ruby on Rails:在哪里定义全局常量?
我有兴趣在新应用程序上执行"Rails Way".我还想在某种上下文中引用常量来使代码更具可读性.我有一个应用程序,用户可以请求访问其他用户的数据集.此AccessRequest可以具有以下状态之一:
查看拒绝批准
我可以看到这些值将来用于报告功能,所以我想让它们成为常量,以避免任何拼写或大写问题.我以为我会把它们放在config/initializers目录下的constants.rb文件中.
我想将这些称为AccessRequest :: REVIEW.因为我已经有一个名为AccessRequest的模型,将它们放在那里是否有意义?或者将它们包装在config/initializers目录中的constants.rb文件中的类中?Rails方式是哪种方式?
我经常需要在我的应用程序中创建分支以进行新的开发.这通常意味着我对我的分支中的Gemfile进行了更改,这些更改在Master中不存在,因此我最终得出了vendor/cache中缓存的gem的差异.
我发现让我感到烦恼的是我正在提交缓存的宝石,但我不知道它是否确实是错误的.我应该是.gitignore这些?如果是这样,我应该git rm
缓存的gem文件吗?
我在一个文件中有一个模块,my_mod.rb
声明如下所示:
module Reports
module MyMod
def mymethod
...
end
end
end
Run Code Online (Sandbox Code Playgroud)
我只是想跑mymethod
.它显然不是一个类方法,所以我不能运行它:
Reports::MyMod.mymethod
Run Code Online (Sandbox Code Playgroud)
然而我希望有一些方法可以让解析器评估该方法,而无需经过一堆module_eval和module_function的东西.它应该比那更容易,不应该吗?
我使用EngineYard,我的部署失败了.我收到这条消息:
Some gems seem to be missing from your vendor/cache directory.
Could not find rspec-core-2.6.0.rc2 in any of the sources
Run Code Online (Sandbox Code Playgroud)
如何确保这些宝石进入该目录?
除root之外的用户是否可以创建数据库?
GRANT SELECT, CREATE ON *.* TO 'myguy'@'thatmachine' IDENTIFIED BY PASSWORD '*12057DFA2BFBD8760D4788735B1C3E26889D7ECE' |
GRANT ALL PRIVILEGES ON `db1`.* TO 'myguy'@'thatmachine'
GRANT ALL PRIVILEGES ON `db2`.* TO 'myguy'@'thatmachine'
Run Code Online (Sandbox Code Playgroud)
我想知道这里缺少什么特权?另外,为什么第一行有一个密码呢?
UPDATE
让我进一步澄清我的问题是什么.我有两个数据库机器,源和目标.源计算机上有许多客户数据库.我需要将这些源数据库移动到另一台目标机器.
数据库采用mysqldump'ed .sql文件的形式,这些文件是从源到目标的sftp.然后,目标用户(而不是root)必须从每个.sql文件本地重新创建数据库,执行某些操作,然后删除数据库.
我找不到一种方法来为目标用户提供这些权限而不给予他全局权限*.*
,这有效地使该用户像root一样危险.
我没有在Ruby包中看到任何可以帮助我为大块代码添加注释的东西.我在网上找到这样的快捷方式的链接似乎不再有效.
更新:经过我自己的大量艰苦工作,我已经解决了这个问题.我很高兴成为任何需要帮助的人的资源.这是我工作设置的要点.
我已经尝试了我能找到Google和SO的所有解决方案.以下是我尝试过的一些不同的事情:
page.execute_script %Q{$('#{selector}').val('#{value}').trigger('keydown')}
Run Code Online (Sandbox Code Playgroud)
和
fill_in field, with: options[:with]
page.execute_script %Q{ $('##{field}').trigger('focus') }
page.execute_script %Q{ $('##{field}').trigger('keydown') }
Run Code Online (Sandbox Code Playgroud)
这是失败的:
page.should have_selector('ul.ui-autocomplete li.ui-menu-item a')
Run Code Online (Sandbox Code Playgroud)
但是当我在Firebug中查看并在浏览器中测试它时,它肯定存在.
以下是所有细节,包括上述内容的重述.请记住,自动填充字段在浏览器中正常工作.
listing_integration_spec.rb
require "spec_helper"
describe "Listing Integration" do
let!(:user) { login_user }
it "lets a user add information listing", js: true do
listing = create(:listing, user: user)
click_link('Additional Information')
click_link('Create')
fill_autocomplete('listings_search', with: listing.item_id)
end
end
Run Code Online (Sandbox Code Playgroud)
spec/support/feature_helper.rb
def fill_autocomplete(field, options = {})
fill_in field, with: options[:with]
page.execute_script %Q{ $('##{field}').trigger('focus') }
page.execute_script %Q{ $('##{field}').trigger('keydown') }
selector …
Run Code Online (Sandbox Code Playgroud) rspec ruby-on-rails jquery-autocomplete capybara poltergeist