gpt4 book ai didi

ruby-on-rails - 如何在没有 Rails 的情况下使用事件记录

转载 作者:数据小太阳 更新时间:2023-10-29 06:37:00 28 4
gpt4 key购买 nike

伙计们 我试图在没有 rails 的情况下使用事件记录,但似乎无法让 has_many 正常工作。我从未尝试过在没有 Rails 的情况下使用事件记录。我可以从单个表中查询,但关系似乎不起作用。任何人都可以快速浏览一下,看看我是否遗漏了什么。这是 stub

#!/usr/bin/ruby

require 'rubygems'
gem 'activerecord'

require 'sqlite3'
require 'active_record'

ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3',
:database => 'test.db'
)

class User < ActiveRecord::Base
has_many :problems
end

class Problem < ActiveRecord::Base
belongs_to :users
end

def show_single_item
pr = Problem.find(:first)
puts "showing first problem from the db below", pr.desc
end

def show_all_items
pr = Problem.find(:all)
puts "showing all problems from the db below"

pr.each do |a|
puts a.desc
end
end

def check_has_many
user = User.find(:first)
puts user.problem.desc
end

# run some methods
show_single_item # works
show_all_items # works
check_has_many # not working


------

here is the schema of users and problems from the database

sqlite> .schema users
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "first_name" varchar(255), "last_name" varchar(255));

sqlite> .schema problems
CREATE TABLE "problems" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer, "desc" varchar(255));

and some selects to show some data from the tables

sqlite> select * from users;
2|mike|smit
3|mike|wilson

sqlite> select * from problems;
1||first problem
2||it went
3||this is a new problem
4||some more junk data

这里是错误

ruby-1.8.7-p352/gems/activemodel-3.2.3/lib/active_model/attribute_methods.rb:407:in `method_missing': \
undefined method `problem' for #<User id: 2, first_name: "mike", last_name: "smit"> (NoMethodError)
from /home/wileybd/.rvm/gems/ruby-1.8.7-p352/gems/activerecord-3.2.3/lib/active_record/attribute_methods.rb:148:in `method_missing'
from ./main.rb:38:in `check_has_many'
from ./main.rb:44

如有任何帮助,我们将不胜感激。

最佳答案

我想我知道你想做什么。如果我没记错的话,您想显示给定用户的每个问题的 desc 值。

一个简单的方法来完成你需要的是你的最后两种方法的组合:

user = User.first
user.problems.each do |pr|
puts pr.desc
end

您在代码中遇到的问题是,从语义上讲,您是在说“显示用户问题的描述(注意它是单数的)”,而不是说“显示用户遇到的每个问题的描述”,如果可能的话应该是这样的:

puts user.problems.descs  # This will not work

但这不是它的工作方式。但是,有一个 new method你可以使用:

puts user.problems.pluck(:desc)

该方法将为用户生成每个问题的描述值数组。您可能可以使用输出来按照您喜欢的方式打印它。

关于ruby-on-rails - 如何在没有 Rails 的情况下使用事件记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11111733/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com