railsでデータベースにアクセスしてテーブルの値を書き換えたいのですが、うまくいきません。 


def hoge  
 @hoge = User.find(params[:id])
 @hoge.char = 'A'
 @hoge.save
 redirect_to :action => "show", :id => @hoge
end

とコントローラに書いているのですが、データベースの値は変更されません。

saveのところを
if @hoge.save
 puts "Good"
else
 puts "Bad"
end

と書き換えると、Badが表示されるのでsaveがうまくいっていないみたいなのです。

findで取ってきたデータを
@hoge = User.find(params[:id])
p @hoge
とすると、ちゃんとデータは取得できていて、

データ変更後の
@hoge.char = 'A'
p @hoge
とすると、charの値も変更されています。

何か原因になりそうなものはありませんでしょうか?

気になるのがscaffoldしたテーブル(A)とは別のテーブル(B)をいじっていることなのですが、これが原因かと思い、scaffoldしたテーブル(B)のコントローラから同じようにやってみたのですがfalseになってしまいました。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/09/27 02:06:01
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:kent0608 No.1

回答回数220ベストアンサー獲得回数23

ポイント35pt

saveメソッドでエラーが起きるということは、O/Rマッピング設定が出来ていない可能性があります。以下の点について確認してください。

$RAILSROOT/app/models/user.rb に

----

class User < ActiveRecord::Base

end

----

と記述されている。

usersテーブルには

---

id int(11) auto_increment <- primary_key

char varchar(255)

---

がある。(phpMyAdminなどで確認してください)

必要に応じてサンプルデータ入力

$RAILSROOT/config/database.ymlの設定

(パスワードの設定など)

$RAILSROOT/app/view/hoge.rhtml またはリダイレクト先のshow.rhtml

----

適当に何か記述

mysqld起動

script/server でサーバを起動

http://localhost:3000/controller(任意)/hoge/1(任意)

にアクセス

これで動くはずなんですが・・・

id:nagiwind

ありがとうございます。

お答え頂いたとおりやってみましたが、やはりsaveできませんでした。

違うテーブル(User→Time)に同じカラムを作ってデータを保存するとうまくいくのですが、このテーブルだけうまくいきません。

def hoge  

 @hoge = Time.find(params[:id])

 @hoge.char = 'A'

 @hoge.save

 redirect_to :action => "show", :id => @hoge

end

テーブルが更新できなくなっているのでしょうか?

テーブルを更新できなくするといったことができるのかどうかもわかりません。

2007/09/25 01:37:36
id:kent0608 No.2

回答回数220ベストアンサー獲得回数23

ポイント35pt

Railsからではなく、直接SQLを用いてUsersテーブルに何かデータを追加してみてください。phpMyAdminなどを使用してGUIから操作してもOKです。

これでエラーが起きるようであれば、データーベースの設定が原因かと思います。

その時に出るエラーメッセージを見れば、どこが悪いのか分かるはずです。

また、テーブルを作成する際に使ったSQLあるいはmigrationファイルも確認して見てください。

私の技量では、これが限界です・・・

問題の解決が出来るようお祈り申し上げます。

id:nagiwind

ありがとうございました。

まだ解決していないのですが、もう少し自分で試してみます。

2007/09/27 02:05:44

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません