人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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になってしまいました。

●質問者: nagiwind
●カテゴリ:インターネット ウェブ制作
✍キーワード:Char def hoge Rails scaffold
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kent0608
●35ポイント

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(任意)

にアクセス

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

◎質問者からの返答

ありがとうございます。

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

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

def hoge

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

@hoge.char = 'A'

@hoge.save

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

end

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

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


2 ● kent0608
●35ポイント

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

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

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

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

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

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ