我的应用程序中有一个 HABTM 关系,如下所示:
class Book < ActiveRecord::Base
has_and_belongs_to_many :authors
end
class Author < ActiveRecord::Base
has_and_belongs_to_many :books
end
Run Code Online (Sandbox Code Playgroud)
在 Rails 控制台中,我可以像这样访问 Book 和 Author 的记录:
Book.all
Book.first
b = Book.first
b.title = "Title2"
b.save
...
Run Code Online (Sandbox Code Playgroud)
但我不知道如何访问连接表。
如何访问和查看连接表中的记录books_authors?
是否可以更改连接表行?
many-to-many join ruby-on-rails rails-console ruby-on-rails-4
当我这样做时在 Rails 控制台中
u = User.where(id: 1)
"he find the user with id = 1, but then"
u.email
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
NoMethodError: undefined method `email' for #<User::ActiveRecord
Run Code Online (Sandbox Code Playgroud)
为什么 rails 控制台总是在寻找方法而不是属性?如何查看特定属性?
我这样做是因为我在应用程序中有一个方法可以通过 user_id 查找协调器,就像这样
user_id = current_user.id
coordinator = Coordinator.where(user_id: user_id)
course_id = coordinator.course_id
Run Code Online (Sandbox Code Playgroud)
我一直在尝试访问 ec2 实例上的生产控制台,作为弹性 beanstalk 环境的一部分。我能够实际访问控制台,但是当我查询一个对象时,例如。“Wager.all”,它给了我这个错误:
[root@ip-10-0-1-146 config]# bundle execrails c -e production 加载生产环境 (Rails 5.2.4.2) irb(main):001:0> Wager.all Traceback (最近一次调用最后) : PG::ConnectionBad (fe_sendauth:未提供密码)
这是我的 database.yml 文件(需要查看生产配置):
default: &default
adapter: postgresql
encoding: UTF-8
host: 'localhost'
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>
test:
<<: *default
development:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
database: <%= ENV['RDS_DB_NAME'] …Run Code Online (Sandbox Code Playgroud)ruby-on-rails environment-variables amazon-web-services rails-console amazon-elastic-beanstalk
我正在使用awesome_printgem来显示输出pry,看起来很漂亮。由于 awesome_print使用换行符,长输出ap html.chapters.order("position ASC") 仅显示输出的末尾部分,因此如何将结果分页显示为输出less或输出more
谢谢。
在OSX上使用RVM,我正在尝试使用ruby gems.但是,一个
require 'rubygems'
Run Code Online (Sandbox Code Playgroud)
在IRB和Rails控制台中返回false.在这里经历类似的问题,我认为这可能与Gem路径与Gem env有关.
MAC-AC028761:Ruby ac028761$ irb
1.9.3-p429 :001 > require 'rubygems'
=> false
1.9.3-p429 :002 > Gem.path
=> ["/Users/ac028761/.rvm/gems/ruby-1.9.3-p429", "/Users/ac028761/.rvm/gems/ruby-1.9.3-p429@global"]
1.9.3-p429 :003 > exit
MAC-AC028761:Ruby ac028761$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.25
- RUBY VERSION: 1.9.3 (2013-05-15 patchlevel 429) [x86_64-darwin12.3.0]
- INSTALLATION DIRECTORY: /Users/ac028761/.rvm/gems/ruby-1.9.3-p429
- RUBY EXECUTABLE: /Users/ac028761/.rvm/rubies/ruby-1.9.3-p429/bin/ruby
- EXECUTABLE DIRECTORY: /Users/ac028761/.rvm/gems/ruby-1.9.3-p429/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-12
- GEM PATHS:
- /Users/ac028761/.rvm/gems/ruby-1.9.3-p429
- /Users/ac028761/.rvm/gems/ruby-1.9.3-p429@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose …Run Code Online (Sandbox Code Playgroud) 我注意到一件奇怪的事.我不小心输入了:
@a = n
Run Code Online (Sandbox Code Playgroud)
这导致了rails控制台的退出.
在进一步的实验中,我发现即使我只是(在控制台中)
n
Run Code Online (Sandbox Code Playgroud)
控制台退出.如果我尝试任何其他角色,我会得到预期的错误.
a
# => NameError: undefined local variable or method `a' for main:Object
Run Code Online (Sandbox Code Playgroud)
我无法找到任何陈述n用于退出的文件rails console.这是正常的吗?或者我的控制台破坏了一些我根本不懂的东西?
版本:
ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux]
Rails 3.2.13
Run Code Online (Sandbox Code Playgroud) Rails 3.2
Run Code Online (Sandbox Code Playgroud)
我有一个正在运行的 Rails 应用程序,带有 Company MVC。
在 models/company.rb 中,我有以下方法:
def save_company_pay_num
return false unless self.valid?
create_company_pay_num if self.company_pay_num.blank?
res = save_check_company_pay_num
unless res[0]
errors.add(:set_company_pay_num, res[1].try{|r| r.split(':')[1].strip.capitalize})
return false
end
true
end
Run Code Online (Sandbox Code Playgroud)
我有大约 1,000 家公司需要重新发放工资号码。
有没有办法从 Rails 控制台(rails c)执行文件,例如:
reset_pay_num.rb
company_ids=[
'1',
'2',
'3',
...
]
company_ids.each do |c|
company = Company.find(c)
company.save_company_pay_num
end
Run Code Online (Sandbox Code Playgroud) 我有一个名为Company的模型以及许多协会,它是一个拥有更多的协会.(具有依赖性破坏)
com = Company.find_by(name: 'ABC')
Run Code Online (Sandbox Code Playgroud)
然后我通过破坏入口
Company.find_by(name: 'ABC').destroy
Run Code Online (Sandbox Code Playgroud)
现在' com'有记录,当我执行com.save该对象时,它不会与其关联一起存储.
注意 我正在尝试调试我的销毁查询占用时间(它有数百个关联),所以我不想丢失数据,我想在调试后将其保存在控制台中.
我知道FactoryGirl已被弃用而不赞成FactoryBot,但我们还没有更新我们的代码,因此我们仍在使用FactoryGirl.无论如何,在Rails控制台中要求FactoryGirl应该可以工作,但它不是'.
gem已正确包含在我的Gemfile中
group :test, :development do
...
gem 'factory_girl_rails', '~> 4.9.0'
...
end
Run Code Online (Sandbox Code Playgroud)
我跑的时候会出现 bundle
$ bundle | grep factory
Using factory_girl 4.9.0
Using factory_girl_rails 4.9.0
Run Code Online (Sandbox Code Playgroud)
但是当我在控制台中需要它时,它会失败.
[1] pry(main)> require 'factory_girl_rails'
=> false
[3] pry(main)> require 'factory_girl'
=> false
Run Code Online (Sandbox Code Playgroud)
我的Gemfile中的任何其他宝石似乎都没有发生这种情况.谁能帮我解决这个问题?
ruby ×4
activerecord ×1
factory-bot ×1
irb ×1
join ×1
many-to-many ×1
pry ×1
rubygems ×1
rvm ×1