こんにちはtnohoです。就活が終わらなくても、やることやらなければなりません。
今やってるのはWebページの製作でRoRとcakePHPを悩んだ末にRubyはやったこと無いし時間も無いと、cakePHPを選んだのですが罠が多く思ったよりスケジュールが遅れ気味です。
本日の大穴は題名の通り、belongToしたのにselectが狙った配列になってくなんないよ!
という訳で派手にはまったので忘れないうちにどこかに書いておこうというわけです。
StoreにReportをbelongToするので、cakePHPの命名規則に従って、Reportの方にstore_idというカラムを作ったのですが…
Model/Report.phpにはこう。。。
1 2 3 4 5 6 7 8 9 10 11 |
class Report extends AppModel { var $belongsTo = array( 'Store' => array( 'className' => 'Store', 'conditions' => array('Store.shown' => '1'), 'order' => array('Store.id' => 'ASC'), 'foreignKey' => 'store_id' ) ); |
View/Reports/index.ctpにはこう。。。
1 2 3 4 |
echo $this->Form->input( 'Report.store_id', array('label' => '店舗名') ); |
書いたのですが、これだけではselectになっても何も表示されません。そこで本を開くと。。。
Controller/ReportsController.phpにこう書け、って書いてあるんですが。。。
1 2 3 4 5 |
class ReportsController extends AppController { var $scaffold; } |
。。。いやいや、それで済むのは管理画面くらいだって。。。
というわけで、自力で繋げてやるんです。こうやって。。。
1 2 3 4 5 6 |
class ReportsController extends AppController { public function index() { $stores=$this->Report->Store->find('list'); $this->set('stores',$stores); } } |
え…setするのはstoresなの!?
って感じでしょう。というわけではまりました。そう、setするのにstoresって書くんです。
そうすると、Report.store_idなinputにStoreのnameが入ってくれます。
えぇ、setするのは
Report.store_idでも
storeIdsでも
Report_storeIdsでもありません。
storesです。
というわけで、大変はまって3時間くらい費やしたのでした。おわり。
ところで就活始めてみたら、え。みんなRoR使ってんの。えっえぇ!な日々です。
俺、これ終わったらRoR覚えるんだ…