Railsでhas_many throughな関係で、チェックボックスの値をupdateする方法
受付中
回答 0
投稿 ・編集
- 評価
- クリップ 1
- VIEW 1,329

退会済みユーザー
Article Model
class Article < ActiveRecord::Base
has_many :articles_categories
has_many :categories, through: :articles_categories
end
Category Model
class Category < ActiveRecord::Base
has_many :articles_categories
has_many :articles, through: :articles_categories
end
ArticlesCategory Model
class ArticlesCategory < ActiveRecord::Base
belongs_to :article
belongs_to :category
end
ArticlesContoller
class ArticlesController < ApplicationController
before_action :set_article, only: [:show, :edit, :update, :destroy]
def edit
#@genreにcategoryの一つであるgenre(国際、環境、貧困、障害など)をいれる
@genre = Group.genre.first.categories
@selected_categories = ArticlesCategory.where(article_id: params[:id])
@selected_categories_id = []
@selected_categories.each do |sci|
@selected_categories_id << sci.category_id
end
end
def update
begin
@article.update!(article_params)
redirect_to edit_article_path(@article.id), notice: 'Article was successfully created.'
rescue Exception => e
render :edit
end
end
private
def set_article
@article = Article.find(params[:id])
end
def article_params
params.require(:article).permit(:title, :kind, :price_category, :place_category, :place, :price, :term_category, :activity_frequent_category, :necessary_time_category, :target, :deadline, :detail_info, :subtitle, :participation_comment, :atmosphere, :participation_number, :men_rate, :women_rate, :user_id, pictures_attributes: [:file, :description], remarkable_points_attributes: [:text], activity_dates_attributes: [:start_date, :end_date], additional_questions_attributes: [:name, :necessary])
end
end
articles/edit.html.erb
<%= form_for(@article) do |f| %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :genre %><br>
<% @genre.each do |genre| %>
<% if @selected_categories_id.include?(genre.id) then %>
<%= check_box "categories", "#{gemre.status}", {:checked => true} %>
<% else %>
<%= check_box "categories", "#{genre.status}" %>
<% end %>
<%= label_tag "#{genre.name}" %>
<% end %>
</div>
<%= f.submit %>
<% end %>
当然ではあるのですが、
このままではarticle_paramsの内容しかupdateされず、
いろいろ試しましたがCategoryの中身をupdateする方法が見つかっていません。
createでは、
def create
@article = Article.new(article_params)
@article.user_id = current_user.id
params[:categories].each do |key, value|
@article.categories << Category.find(key.to_i) if value == "1"
end
begin
@article.save!
redirect_to edit_article_path(@article.id), notice: 'Article was successfully created.'
rescue Exception => e
render :new
end
end
こんな感じで保存してます。
ご教授よろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる