« どうする | トップページ | 最強でなくていいのです »

学習RoR(6)

 ひとつ解決するとかならず次の問題が出てくる。今やっているのは書籍の出版データ。書名などを item テーブルに、その書名に対応する版刷データを edition テーブルにいれている。list を取るときには item を使ってリストにして、個々の書名の show で、すべての版刷データを表示。まるっきり新規に書名から登録というのを、list ページでの new にあてて、書名などと版刷のフォームから入力。この登録は出来た。削除についても同様に出来た。ただ個々の版刷の登録がうまくできない。削除は出来ている。

 フォームで入力されるのは edition の情報。ここに、item_id も加わるのだけれど、どうもこの渡し方がうまく出来ていないような感じ。

link_to 'add_edition', :action => 'add_edition'

だけだと問題ないようなのだが、ひとたび item_id を渡そうとするとおかしくなる。確かに単純に :id => @item.id のようにしたら、以降の入力フォームでの :edition での :id に影響を与えてしまっておかしくなりそうな雰囲気はする。で、これを :item_id => @item.id とか :locals =>{:item_id => @item.id} とかいろいろ(闇雲に)試してみるものの、なんだかどれも駄目。

 ひとまず動作確認にと、コントローラ側に、@edition.item_id = 1 のように書いてみると、item_id=1 の書名にデータが追加される。

 少々手詰まりな感じなのでちょっと休憩。(下の追記のように解決)


 一方、こちらはうまくいった事。というか分かった事か。先の show で版刷データをずらずらと表示させるときに、最新のものが一番上になるようにしたかった。はじめ暫定的に reverse_each を使っておいたけれど、これではいずれおかしくなるので、きちんとソートされるようにしなくてはと思っていた。で、まずは :conditions オプションを見つけ(というかやっと意味を理解したというべきなのか)、ついでそれならばとページネーションのソートに複数条件ができるのかどうか試していたら出来たのであった。ありがたいありがたい。

:order => 'edition DESC, print DESC'

のようにすれば、ふたつをキーとしてソートしてくれるらしい。

#追記:11/21
 いろいろやっているうちにようやく出来た。link_to のオプションとして渡すのは、:item_id => @item.id で良さそう。また、コントローラの該当するアクションのところで、 params[:edition][:item_id] = [:item_id] としたら正しく処理できた。少しだけ前進。

#さらに追記:11/21
 やっぱり駄目だった。id は渡されているのだけれど、正しい処理がされているわけではなかった。たまたまそう見えていただけだった。ふりだし。

(7)につづく

|
|

« どうする | トップページ | 最強でなくていいのです »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28835/12757504

この記事へのトラックバック一覧です: 学習RoR(6):

« どうする | トップページ | 最強でなくていいのです »