質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.21%

Rails4 コンボボックスの動的表示

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,849
退会済みユーザー

退会済みユーザー

参考サイトを見ながらコンボボックスの動的表示を作っているのですが、子カテゴリの出し方がわかりません

参考サイト
<参考サイト>
 def index
    @countries = Country.all
    @cities = City.where("country_id = ?", Country.first.id)
  end
   
  def show
    @city = City.find_by("id = ?", params[:trip][:city_id])
  end

上記の部分を自分のデータベースに置き換えて記述する方法がわかりません
.allとすると親と子全てのカテゴリが表示されるので、下記のように書きました。子カテゴリの記述方法はなんとすれば良いのでしょうか

def new
    @item = Item.new
    @parent = Category.where("parent_id = ?", 1)#親カテゴリ
    @childs = Category.where("parent_id = ?", Category.first.id)#子カテゴリをだしたいが・・
end

<参考サイト>
<%= form_for :trip, url: {action: "show"}, html: {method: "get"} do |f| %>
  <%= f.select :country_id, options_for_select(@countries.collect { |country|
    [country.name.titleize, country.id] }, 1), {}, { id: 'countries_select' } %>#1が何を指すのかわからない
  <%= f.select :city_id, options_for_select(@cities.collect { |city|
    [city.name.titleize, city.id] }, 0), {}, { id: 'cities_select' } %>#0が何を指すのかわからない

 id | parent_id | name                        |
+----+-----------+-----------------------------
| 1  |           | root                        
| 2  | 1         | メンズ                      
| 3  | 1         | レディース                  
| 4  | 1         | キッズ                      
| 5  | 1         | インテリア/家具             
| 6  | 1         | 家電製品                    
| 7  | 1         | 本                          
| 8  | 1         | チケット                    
| 9  | 1         | おもちゃ                   
| 10 | 1         | エンターテインメント        
| 11 | 1         | スポーツ                    
| 12 | 2         | トップス                    
| 13 | 2         | アウター                    
| 14 | 2         | パンツ                      
| 15 | 2         | 靴                          
| 16 | 2         | 帽子                        
| 17 | 2         | その他                      
| 18 | 3         | トップス                    
| 19 | 3         | アウター                    
| 20 | 3         | パンツ                      


Rails 一覧表示の汎化
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

https://github.com/katoy/rails4_myshop
にサンプルコードを置きました。

カテゴリーの表示方法は3つ用意しています。
  1. scaffold で生成されたもの。
  2. combobox での選択。(第2カテゴリーの内容をダイナミックに変更して表示する)
  3. tree 形式で表示する。
これら3つの表示画面のスクリーンショットを以下においています。
https://github.com/katoy/rails4_myshop/tree/master/screenshots

サンプルコードを github から clone した後, 次のようにして起動することができるはずです。
  $ bundle install
  $ rake db:drop
  $ rake db:create
  $ rake db:migrate
  $ rale db:fixtures:load
  $ rails s

* カテゴリーデータは test/fixturs/categories.yml に設定値が書いてあります。
* combobox での選択 に関係するファイル、メソッドは以下のものです。
  app/controller/categories_controller.rb
     #select  # select 画面のアクションメソッド
     #list    # 第2カテゴリーの内容を返すメソッド。ajax で呼び出す。
  app/views/categies/select.html.erb
  (ajax 呼び出しの後の combobox の内容設定は javascrit, erb を使わずに,
   json でデータを受け取って、それを javascriptを使って直接 設定しています。)

* tree 表示 に関係するファイル、メソッドは以下のものです。
  app/assets/javascript/tree/*
  app/controller/categories_controller.rb
    #tree
  app/views/categies/tree.html.erb

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/12/08 08:21

    早速今晩やってみます!ありがとうございます。

    キャンセル

  • 2014/12/08 20:41

    itemのnewアクションでも動的に動かすことができました。
    Create itemを押してもアイテムを作成できなくなりました。

    キャンセル

  • 2014/12/08 23:18

    アイテムにcategory_idが挿入できません。。

    キャンセル

0

参考記事では、親カテゴリのセレクトボックスを変更した時に、子セレクトボックスで使う値を取得するための非同期リクエストを投げて、レスポンスとしてjsを返して、子セレクトボックスの値を書き換えています。

"何"がわからないのですか?
質問を見る限りは、参考記事を全体的に理解ができていないというように見えます。
何を知りたいのか明確にしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/12/07 02:40

    参考サイトにある
    ------------------------------------------------------------------------------------------
    def index
    @countries = Country.all
    @cities = City.where("country_id = ?", Country.first.id)
    end
    ------------------------------------------------------------------------------------------
    の部分を自分のダータベースの場合に
    どのように記述すれば良いのかがわかりません

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る