rubyのactive_recordについて

このQ&Aのポイント
  • rubyのactive_recordを使用してSQLite3のデータベースにアクセスし、最新のデータを取得するプログラムの作成方法を教えてください。
  • アクティブレコードを使用してRubyでSQLite3データベースにアクセスする方法を教えてください。
  • 最新のデータをアクセスするRubyのプログラムを作成していますがうまくいきません。どうすれば正しくデータを取得できるのでしょうか?
回答を見る
  • ベストアンサー

rubyのactive_recordについて

# coding:utf-8 require 'active_record' ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection('development') class Bookinfo < ActiveRecord::Base end bookinfo = Bookinfo.order("updated_at DESC").first bookinfo.each do |info| puts info.id puts info.author puts info.title puts info.page puts info.date_available end rubyでSQLite3のデータベースにアクセスしてデータの一番新しいものを1つ取り出すプログラムを作成しようと思います。(データベース名: bookinfo.db テーブル名:bookinfo)  このように書いてみましたが、またいろいろ試して見たのですが、どうしてもうまくい きません。教えてくださいお願いします。

  • Ruby
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

どのようなエラーがでているのでしょうか? またデバッガは使っていますか? それを見れば解決できるはずですが。 さて、まずこのファイルをどこに置いていますか? database.ymlと指定されていますので、configフォルダの中でしょうか。 ところが、database.ymlにはdb/development.sqlite3と書かれているはずですので、探し出すことができません。 このファイルをconfigフォルダの外に出して、'database.yml'を'config/database.yml'に変更するとともかくデータベースは読めるようになります。 次に、bookinfo = Bookinfo.order("updated_at DESC").firstで読み込んだときには、配列にはなっていません。 info = Bookinfo.order("updated_at DESC").first puts info.id puts info.author puts info.title puts info.page puts info.date_available としてみてください。

zerozero5320
質問者

補足

ご回答ありがとうございます。 `initialize': SQLite3::SQLException: no such column: updated_at: SELECT "bookinfos".* FROM "bookinfos" ORDER BY updated_at DESC LIMIT 1 (ActiveRecord::StatementInvalid) デバッグしたとき、上のようなエラーがでるのですが、何が原因なのでしょうか。よろしくお願いします。

その他の回答 (1)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

どの行でエラーが出ているのか確認してください。大事な情報です。 多分、Bookinfo.order("updated_at DESC").first だと思うのですが、 ところで、データベースにデータは入っているのでしょうか? updated_atの項目が自体が無いか、もしかしたらデータが全く入っていないのが原因かも知れません。 SQLite3のデータは、コマンドで確認するか、 FireFoxの拡張機能のSQLIte Managerなどで確認や操作ができます。

関連するQ&A

  • ruby on railsのmigrateでカラム名の変更ができません

    ruby on railsにて migrateでDBのカラム名を変更したいのですが、 エラーになってしまいます。 -エラーコード---------------------- rake aborted! uninitialized constant CreateArticles ----------------------------------- ★「datetime」カラム⇒「updated_at」カラムにしたい class RenameColumnArticles < ActiveRecord::Migration def self.up rename_column(:articles, :datetime, :updated_at) end def self.down rename_column(:articles, :updated_at, :datetime) end end よろしくお願いします。

  • Ruby初心者です。

    以下の練習問題をやっているのですが、どうもうまくいきません。 (1)担当名が"end"になる迄、担当名と売上を入力する。 (2)売上合計を求める。 (3)各担当の売上が売上合計の何%になるかの比率の計算を行う。 (4)担当名、売上、比率を表示する。 どこがいけないのがご教授頂けますでしょうか。 よろしくお願い致します。 *********************************** #! ruby -E Windows-31J:utf-8 # coding: utf-8 kensu = 0 uriage = 0 goukei = 0 uriage_t = [20] tanto = [10] tanto = [20][10] puts("担当名がendで終了") print(kensu = kensu + 1, "人目の担当名は") tanto = $stdin.gets.chomp! tanto.gsub!("\n", "") print("売上") uriage = $stdin.gets.chomp!.to_i while tanto != "end" kensu = kensu goukei = goukei + uriage uriage_t = uriage tanto_t = tanto print(kensu = kensu + 1, "人目の担当名は") tanto = $stdin.gets.chomp! tanto.gsub!("\n", "") if tanto != "end" print("売上") uriage = $stdin.gets.chomp!.to_i end end kensu = kensu + 1 goukei = goukei + uriage uriage_t = uriage tanto_t = tanto, "合計" puts "________________________________________" puts "  担当      売上  比率  " puts "________________________________________" for i in kensu kensu += i ritu = uriage * 100 / goukei puts "担当名は#{tanto} 売上は#{uriage_t}円 比率は#{ritu}%" end

  • テスト環境でのsaveについて

    Ruby1.9.3とRails3.2.9でのテスト環境のモデルの単体テスト(unit)での質問です。 unitのuser_test.rb に下記の記述を書いて試験しているのですが、saveコマンドでのusersテーブル への書き込みが、下記でnewしたuserの内容ではなく、fixturesフォルダの下の、users.ymlのテストデータの内容が書き込まれるようなのですが、動作はそれでよいのでしょうか?また、YMLデータではなくて下記のデータを書き込ませるsaveの書き方とかはあるのでしょうか? test "user auth test" do user = User.new(:name => "tanaka", :password => "pass", :password_confirmation => "pass") user.save assert User.auth("tanaka", "pass") end 後、現在、usersテーブルのhashed_passwordフィールドに、モデル(user.rb)の中で、パスワードの セッターを再定義するために、 class User < ActiveRecord::Base   def password=(pwd)   @password = pwd    #   return if pwd.blank?   self.hashed_password = User.encrypt(@password)   end # 以下、省略 end の記述を入れているのですが、現在何故か、YMLのデータが暗号化されないでそのまま入力されてしまっていますま。このメソッドの呼び出しは、上に書いたusersテーブルの内容またはYMLデータの書き込み時に、実行されると思っていいのでしょうか?(両方、またはどちらか?) 御教示願えればと思います。

    • ベストアンサー
    • Ruby
  • ruby on railsにおけるモデルの関連付け

    ruby on rails のアソシエーションについて。 ruby on railsにおける、リレーショナルデータベースの作成についての質問です。 現在、 name,yomi,commentのカラムを持つnamesテーブル name1,name2,groupname,commentのカラムを持つgroupsテーブルをscaffoldにて作成しております。 この2つのテーブルを関連付けをしたいと考えています。 具体的には、 name1とname2を、それぞれnamesテーブルの中のnameを参照して使用したいと考えています。 各モデルのプログラムは以下のようになっています。 name.rb class Name < ActiveRecord::Base has_many :group attr_accessible :name :yomi :comment end group.rb class Group < ActiveRecord::Base attr_accessible :name1, :name2, :groupname, :comment end おそらく、groupテーブルに、name_idというカラムを追加し、nameテーブルにはhas_many :groups を追加する。といった形で良いかと考えていましたが、うまくいきません。 どのような形で実装すればよいか教えていただけないでしょうか。 また、もう1点、現在groupテーブルをweb上から登録する機能を作っています。 仕様としては、入力したname1,name2がすべてnamesテーブルのnameに含まれていれば、 name1,name2,groupname,commentすべてを登録、 いずれかあるいは両方が含まれていなければ、nameの登録画面へリンク、 となります。 現在実装中のプログラムのコントローラー部分(一部)は以下のようになります。 def create tag = params[:tag] @groups = Group.new もし、name1 name2 がnam2に含まれているならば、 @groups.name1 = tag[0] @groups.name2 = tag[1] @groups.groupname = tag[2] @groups.comment = tag[3] そうでなければ、 redirect_to name 登録画面 このような形で考えています。 こちらも、どのように実装すればよいか教えていただけないでしょうか? railsのバーションは3.1です。

  • rubyでハングル含むファイル名を読むと文字化け

    ruby 初心者です 環境は以下の通り Windows7 64bit Ruby 2.3.1 状況 rubyでハングル含むファイル名をリネームしたいのですが、 フォルダ内のファイル名を読み込んでputsで表示すると、ハングル文字が「??」に文字化けして、 又、renameを実行するとエラーになります。 ハングル文字化けBJ??になる Windowsのファイル名 999-BJ쏘이-hkqwer-20211115.mp4 rubyで読み込んだ後、putsで確認するとハングルが文字化けする 999-BJ??-hkqwer-20211115.mp4 質問 ハングル文字の文字化けを直すには、どの様に指定すればよいのでしょうか? また、.renameする際、何か指定があれば、知りたいです。 補足) ちなみに、ファイル名が、英数や漢字・かなを含む場合や、 .rb内でファイル名に直接ハングル文字を指定すると、正常にリネーム出来ています。 変更前:999-BJ쏘이-hkqwer-20211115.mp4 変更後:☆korean 259-BJ쏘이-hkqwer-20211115.mp4 補足) ・renameを実行するとエラー ren2.rb:207:in 'rename': Invalid argument @ rb_file_s_rename - (C:USers/xxxxxx/Desktop/☆korean/999-BJ??-hkqwer-20211115.mp4, C:USers/xxxxxx/Desktop/☆korean/☆korean 259-BJ??-hkqwer-20211115.mp4) (Errno::EINVAL) ren2.rb:207:in `rename': Invalid argument @ rb_file_s_rename - (C:Users/xxxxxx /Desktop/☆korean/999-BJ??-hkqwer-20211115.mp4, C:Users/xxxxxx/Desktop/☆korean/ ☆korean 259-BJ??-hkqwer-20211115.mp4) (Errno::EINVAL) ・.openにエンコード指定するとエラーになる Dir.open("#{tr_path}", "rw:sjis:utf-8") do |dir| ren2.rb:48:in `open': wrong number of arguments (given 2, expected 1) (ArgumentError) ・実行したソース ruby ren2.rb # coding: UTF-8 ms_path = "G:\/G_Download\/G_XVIDEOS\/1優良\/☆korean" # 本番用 tr_path = "C:\Users/xxxxxx/Desktop/☆korean" # テスト用 Dir.open("#{tr_path}") do |dir| # テスト用 for tr_name in dir puts tr_name # # # .と..を読み飛ばす # # if tr_name == "." || tr_name == ".." then next end # # 読み込んだファイル名から抽出した文字s_nameで、本番用フォルダーを検索して、 # あれば「☆korean xxx-」を取得する # # # テスト用文字 # s_name = "hkqwer" # # 保存用フォルダを検索して、類似ファイルが存在したら、☆korean xxx-を取得する # Dir.glob("#{ms_path}/*#{s_name}*.mp4") do |x| if File.basename(x).include?("☆korean ") == true then #☆korean か? ms_num = File.basename(x)[0,12] elsif File.basename(x).include?("☆Korean ") == true then #☆Korean か? ms_num = File.basename(x)[0,12] else next end # # 999-を☆korean xxx-で置き換える # new_name = tr_name.gsub("999-", ms_num) # 999-を☆korean xxx-へ置き換える # # 元ファイルを、新ファイル名に変更する # File.rename("#{tr_path}/#{tr_name}", "#{tr_path}/#{new_name}") end end end

    • ベストアンサー
    • Ruby
  • Ruby on Rails について

    Ruby on Railsでアプリケーションを作ります。 バージョンは:InstantRails-2.0-win 1、データベース表の作成: データベース名:myapp   テーブル名:peoples データベースを作成したら、MySQLを再起動します。 2、新規アプリケーションの作成: アプリケーション名:myapp Instant RailsウィンドウのIボタン⇒Rails Applications⇒Manage Rails Applicationsをクリックします。 Rails ApplicationsダイアログボックスのCreate New Rails App・・をクリックします。 コマンドプロンプト画面が表示されます。 rails myapp を入力します。 コマンドプロンプトのプロンプトが入力状態になって、コマンドプロンプトを閉じます。 Rails ApplicationsダイアログボックスのRefresh Listボタンをクリックしたら、myappアプリケーション名が追加されます。 3、アプリケーション・モデルの作成: InstantRails-2.0-winフォルダ ⇒ rails_apps ⇒ myapp ⇒ config ⇒ datebase.yml ファイルを開きます。 ↓に書き換えます。 development: adapter: mysql database: myapp timeout: 5000 username: root host: localhost   Instant RailsウィンドウのIボタン ⇒ Rails Applications ⇒ Open Ruby Console Windowをクリックします。 コマンドプロンプトが開きます。 cd myapp ruby script/generate model people を入力します。 4、コントローラの作成: コマンドプロンプトを開きます。 cd myapp ruby script/generate controller people を入力します。 コマンドプロンプトを閉じます。 InstantRails-2.0-winフォルダ ⇒ rails_apps ⇒ myapp ⇒ app ⇒ controllers ⇒ people_controller.rb ファイルを開きます。 class PeopleController<Application Controller scaffold :people ←←追加した行です。 end 5、新しいアプリケーションを起動 Rails ApplicationsダイアログボックスのRails Applications 欄の myappの所をチェックし、Start with Mongrelボタンをクリックします。 コマンドプロンプト画面が起動し、ポート番号が表示されます。 Webブラウザを起動し、アドレス欄に 一つは: 「http://localhost:people/list」を入力し、Enterキーを押します。 ↓Errorメッセージが表示されました。 NoMethodError in PeopleController#list undefined method `scaffold' for PeopleController:Class RAILS_ROOT: C:/taiyo/INSTAN~1.0-W/rails_apps/myapp   一つは: http://localhost:3000/people Enterキーを押します。 ↓Errorメッセージが表示されました。 NoMethodError in PeopleController#index undefined method `scaffold' for PeopleController:Class RAILS_ROOT: C:/taiyo/INSTAN~1.0-W/rails_apps/myapp どこの手順が違ってるのが解らなくて、 Errorの解決方法ですごく困ってます。 どうかご指導をお願いいたします。 もう一つはErrorメッセージの3行目は C:/taiyo/INSTAN~1.0-W/rails_apps/myappですけど、 InstantRails-2.0-winフォルダのはずですけど、 INSTAN~1.0-Wフォルダになった原因がよくわからないです。 すごく困ってます。 ご指導お願いいたします。

  • PHPでのWAVダウンロードスクリプト

    メールアドレスとパスワードを入力してデータベースと一致すれば wavファイルをダウンロードできるサイトを作っています。 私の環境では問題なく動作するのですが、知人数人に頼んだところ wavファイルがダウンロードできる人とできない人がいました。 また、ダウンロードできても再生できない人、できない人がいました。 いずれも環境はIEです。 自分では問題なく動作するので何が原因がわかりません。。。 一応、IE、クローム、FireFoxで動作はチェックしています。 どなたか原因が分かる方いましたら宜しくお願い致します。 以下ソースです。 <?php //ダウンロード条件参照 @$mail = $_POST["email"]; @$pass = $_POST["password"]; if($db = sqlite_open('データベース名')){ $query = "SELECT * FROM テーブル名 WHERE mail = '$mail' and pass= '$pass'"; @$result = sqlite_query($db, $query); $info = sqlite_fetch_array($result); $id = $info['id']; } //ダウンロード→保存 if($id_music != null){ $fullpath = "wav/$id.wav"; $filename = "$id.wav"; header("Content-Type: audio/wav"); header("Content-Disposition: attachment; filename=$filename"); readfile($fullpath); exit; } print "メールアドレス、パスワードが間違っています!"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> </body> </html>

    • 締切済み
    • PHP
  • Python3でのメタプログラミングについて

    下記の Ruby スクリプトと同じことを Python で行う場合、どのように実装すればいいでしょうか? <前提> ・メソッドを Klass クラスに実行時に動的に追加する。 ・追加したメソッドの動的削除、変更は必要ない。 ・メソッド定義は、Python のオブジェクトではなく単なる文字列。 ・メソッド内部から Klass クラス内のインスタンス変数にアクセスする。 ・Klass クラスや Klass インスタンスを扱う処理から、動的に追加したメソッドを呼び出す。 ・追加したメソッドはシングルトンメソッドである必要はない。 <目的> Klass クラスのカスタマイズ機能をメソッド定義文として外部に保存しておいて、実行時に呼び出して機能を拡張するような目的です。Klass クラスはめったに変更されないもの、カスタマイズ機能(メソッド定義文)はよく変更されるもの、という切り分けをしたいため、単純に多重継承や MixIn はしたくないです。(上手い方法があればいいのですが…) #!/usr/bin/env ruby # coding: utf-8 # 文字列のメソッド定義 $user_funcs = [' def user_foo() puts "foo" * @x end ', ' def user_bar() puts "bar" * @x end '] # ↑本来は文字列として外部DBに記録されている。 # ---- # # 拡張したいクラス # class Klass # インスタンス変数を持つ def initialize @x = 3 end attr_accessor :x # 文字列で定義されたメソッドを追加 $user_funcs.each do |f| eval f end end # ---- # # 呼出方法 # obj = Klass.new # 追加されたメソッド(user_から始まる名前)を列挙しながら実行する # => どんな定義がされていても、命名規則さえ守っていれば呼び出し側はそのメソッド名を知る必要はない。 obj.methods.select {|m| /^user_/ =~ m }.each do |m| eval "obj.#{m}" end # 追加されたメソッドはシングルトンメソッドではなく、あくまでもインスタンスメソッドである。 obj2 = Klass.new # インスタンス変数の書き換え obj2.x = 4 # インスタンスメソッドの書き換え def obj2.user_bar() puts "hoge" * @x end obj2.methods.select {|m| /^user_/ =~ m }.each do |m| eval "obj2.#{m}" end

  • 2003Active Direcotry

    こんにちは 皆様方  2003ServerのActive Direcotoryの件でご質問があります。 会社で経理をしていますが、ひょんな事でパソコン担当者に なってしまいました。 今、昔のパソコンで何とか2003Serverを使用しています。 最近、2008の事を考えて新しいパソコンに変更すると言う案が 社内で出てきました。 当時の担当者は退社してもういません。 それで 私に回ってきてしまいました。 取りあえずは2003Serverを使用すねと言うことになりました。 色々と調べた結果以下の方法を参考にして以前のハードディスクの クローンを作り新しいパソコンで起動はしました。 しかし、Active Direcotoryの内容にUserも何もありません。 ただ 同じIPアドレスになる為Lanに接続していない状態での確認です。 それには以下のサイトを参考にしています。 http://support.microsoft.com/kb/824125/ja#top クライアントからのServerへの登録は知っています。 しかし サーバーからのドメインユーザーの登録は解りません。 クライアントが20台ありますから、一台ずつ変更すると大変になります。 Active Direcotoryの中も移動できるようになりませんか? できる範囲で詳しくお願いできませんか? 宜しくお願いします

  • preferenceとactiveはどのように訳せば良いでしょうか

    趣味でPC用英語版ソフトを日本語に直しています。 "preference"は「設定」で良いのでしょうか。画面のpreference、プロジェクトのpreferenceという感じで使われ、次の画面ではほとんどが設定のダイアログボックスが表示されます。Yahooの翻訳では「好み」のニュアンスが入るように思えます。 また、Activeは、Set Active Document、Active Projectのように使われます。ActiveはEnableに似ていると思うのですが、ドキュメントを「有効化」では意味が違うように思えます。意味としては指定されたドキュメントをメインとして使用する、という様な感じでしょうか。 良い翻訳があればお教えください。