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になってしまいました。
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(任意)
にアクセス
これで動くはずなんですが・・・
Railsからではなく、直接SQLを用いてUsersテーブルに何かデータを追加してみてください。phpMyAdminなどを使用してGUIから操作してもOKです。
これでエラーが起きるようであれば、データーベースの設定が原因かと思います。
その時に出るエラーメッセージを見れば、どこが悪いのか分かるはずです。
また、テーブルを作成する際に使ったSQLあるいはmigrationファイルも確認して見てください。
私の技量では、これが限界です・・・
問題の解決が出来るようお祈り申し上げます。
ありがとうございました。
まだ解決していないのですが、もう少し自分で試してみます。
ありがとうございます。
お答え頂いたとおりやってみましたが、やはりsaveできませんでした。
違うテーブル(User→Time)に同じカラムを作ってデータを保存するとうまくいくのですが、このテーブルだけうまくいきません。
テーブルが更新できなくなっているのでしょうか?
テーブルを更新できなくするといったことができるのかどうかもわかりません。