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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

818閲覧

Ruby on Rails プルダウンメニューの作り方

oikky0206

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/07/03 07:44

編集2017/07/04 15:34

###前提・実現したいこと
Ruby on Railsで動的?なプルダウンメニューを作成したいと思っています。
プルダウンメニューでカテゴリーを選択してから、テキストボックスに記事をいれればその記事がそのカテゴリーと結びついて保存されるようにしたいです。
また、次回以降カテゴリーを選択すると、登録された記事がテキストボックスに表示されるようにしたいです。

###発生している問題・エラーメッセージ

First argument in form cannot contain nil or be empty

###該当のソースコード
「カテゴリーコントローラー」
class Admin::CategoriesController < Admin::Base

カテゴリー一覧

def index
@categories= Category.order('id')
end

新規カテゴリー

def new
@category = Category.new(category: "sample")
end

#カテゴリー保存
def create
@category = Category.new(params[:category])
if @category.save
redirect_to admin_categories_path, notice: "カテゴリーを登録しました。"
else
render "new"
end
end

「カテゴリーモデル」
class Category < ActiveRecord::Base
has_many :articles, dependent: :destroy
end

「記事コントローラー」
class Admin::ArticlesController < Admin::Base
#プルダウンメニュー?
def index
@categories = Category.all
@article #@articleをどうやって使えばいいか?
#render "show"
end
#カテゴリー選択後
def show
# show_one_category? ここであるカテゴリーに対する記事を表示?
end

def new
@article = Article.new(article: "defalt")
end
end

「記事モデル」
belongs_to :category

「記事マイグレーション」
t.references :category, null: false
add_index :articles, :category_id

「記事index.erb」
<%= form_for (@categories) do |f| %>
<%= f.label :category_id %>
<%= f.collection_select :category_id, Category.all, :id, :category %>
<% end %>

###試したこと
rails初めて3週間目なので3日ほど色々ネットで探してみましたがどうしてもわかりません。参考になるサイトだけでも結構ですのでよろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

category一つに対し、articleが一つしか表示されないような気がしますが…。
それでいいのかは、ほっておいて

ruby

1#articles/_form.html.erb 2<%= form_for (@article) do |f| %> 3<%= f.label :category_id %> 4<%= f.collection_select :category_id, Category.all, :id, :category,id: :dy_select_box %> 5<%= f.label :article %> 6<%= f.text_area :article ,id: :article_area %> 7<% end %>

これで、前半はおっけー

で、プルダウンメニューの方ですが
Rails4.2ですと(Rails5.1ですと色々と楽しいことができるのですが。)
RailsでAjax基本形(Scaffoldで学ぶ)
を参考にしてindex.js.erbを生成し、jqueryでプルダウンメニューのchangeイベントにホックさせる。

javascript

1$('#dy_select_box').change(function(){$.ajax({ 2type: "GET", 3url: "/articles/", 4cache: false, 5data: { category_id: $(this).val(), remote: true }//必要なステータスを送るremote:trueを忘れずに 6}); 7});

上記をどこかであらかじめ、読み込んでおく
でcontrollerとviewを下記のように変更

ruby

1#articles_controller.rb 2#~略~ 3def index 4@articles = Article.all 5@article = Article.find_by(category_id: params[:category_id]) 6respond_to do |format| 7format.html{} 8format.js{} 9end 10end 11

ruby

1articles/index.js.erb 2$("#article_area").value("<%= @article.article %>");

でうまく行くと思います。

投稿2017/07/03 09:06

編集2017/07/03 09:08
moke

総合スコア2241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oikky0206

2017/07/04 14:37

ありがとうございます。 やってみようと思います! カテゴリーに対して記事がなければプルダウンの下のテキストボックスに記事を入力して対応づけて保存したいのですがそれってできますか?
oikky0206

2017/07/04 14:38

あと、カテゴリーに対して複数の記事を表示したいのですが、上記の自分の書き方だとひとつしか表示されないのでしょうか?
oikky0206

2017/07/04 15:38

上記の方法で試してみたところコントローラーで First argument in form cannot contain nil or be empty というエラーが出ました。 よく考えれば、カテゴリーに対して記事を登録していくようにしたいので、(最初は記事なし、カテゴリーは最初に登録済み)このようなエラーがでるのだと思うのですがあっていますでしょうか? あっている場合これはどのように改善すればいいのでしょうか?
moke

2017/07/05 02:27 編集

どのコントローラーどのタイミングでそのエラーが出たのですか? おそらくその理由では、そのエラーは出ないかなと とりあえず、 次回以降カテゴリーを選択すると、登録された記事がテキストボックスに表示されるようにしたいです。 を読む限り、通常テキストボックスから複数のリストを選択することはできないので 全部、または一つをテキストボックスに挿入すると考えたのですが。 全部だともちろん使いにくいので、一つあえていうなら一番最初の投稿かなと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問