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

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

ただいまの
回答率

90.01%

[Rails]謎の空の値&Unpermitted parameter

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 2,894

yclin_tagaya

score 25

多対多の関係を作りたいですが、
createとupdateの時うまくいかないため、
質問をさせていただきました。

[app/controllers/admin/stylists_controller.rb]

def new
    @stylist = Stylist.new
 end

  def create
    @stylist = Stylist.new(stylist_params)
    if @stylist.save
      redirect_to admin_stylists_path
    else
      render 'new'
    end
  end

  private
    def stylist_params
      params[:stylist].permit(:name, :furigana, :email, :tel, :area_ids => [])
    end

[app/views/admin/stylists/new.html.erb]

<div class="col-md-4 col-md-offset-4">
  <%= simple_form_for [:admin, @stylist] do |f| %>
    <div class="form-group">
      <%= f.input :name, label: '名前', input_html: { class: "form-control"}  %>
      <%= f.input :furigana, label: 'ふりがな', input_html: { class: "form-control"} %>
      <%= f.input :email,  label: 'メールアドレス', input_html: { class: "form-control"} %>
      <%= f.input :tel, label: '電話番号', input_html: { class: "form-control"} %>
      <%= f.input :areas, label: 'エリア', collection: Area.all, as: :check_boxes, input_html: { class: "checkbox" } %>
    </div>
    <div class="form-actions">
      <%= f.button :submit, '確定', disable_with: "Submiting...", class: "btn btn-primary" %>
    </div>
  <% end %>
</div>

[app/models/stylist.rb]

class Stylist < ActiveRecord::Base
  has_many :stylist_areas
  has_many :areas, :through => :stylist_areas
end

[app/models/area.rb]

class Area < ActiveRecord::Base
  has_many :stylist_areas
  has_many :stylists, through: :stylist_areas
end

[app/models/stylist_area.rb]

class StylistArea < ActiveRecord::Base
  belongs_to :stylist
  belongs_to :area
end

[db/seeds.rb]

["京都", "大阪", "神戸"].each do |area|
  Area.find_or_create_by!(name: area)
end

以上の設定でやってみたら、

Parameters: {"utf8"=>"✓", "authenticity_token"=>"Oz2LCnpAvN9VbpE2N1Cce7se0Klxrl6d0hVBGc9lsO+i4mm0VzJ6mBQx2kQXdtiDlBCB6PsuymTZ/ysoiKWePA==", "stylist"=>{"name"=>"ヘアメイク1", "furigana"=>"へあめいく1", "email"=>"111@mail.com", "tel"=>"00-0001-0001", "areas"=>["1", "2", ""]}, "commit"=>"確定", "id"=>"2"}
  Admin Load (0.1ms)  SELECT  "admins".* FROM "admins" WHERE "admins"."id" = ?  ORDER BY "admins"."id" ASC LIMIT 1  [["id", 1]]
  Stylist Load (0.1ms)  SELECT  "stylists".* FROM "stylists" WHERE "stylists"."id" = ? LIMIT 1  [["id", 2]]
Unpermitted parameter: areas
   (0.0ms)  begin transaction
   (0.0ms)  commit transaction
Redirected to http://127.0.0.1:3000/admin/stylists
Completed 302 Found in 3ms (ActiveRecord: 0.2ms)

まずParameters{...}に
areas"=>["1", "2", ""]
謎の空の値が出てきました・・・

また
Unpermitted parameter: areas
と許可されていないparametersだと怒られました。

いろいろぐぐってみたら、strong parametersのとこで
:area_ids => []
と書けば直るとのことですが・・・

ご回答頂ければと思います!
どうぞよろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

チェックされない時に何も送られない、という事態を避けるために、Rails側が自動で空の値のhiddenを追加しています。

止めるには、

<%= f.input :areas, label: 'エリア', collection: Area.all, as: :check_boxes, input_html: { class: "checkbox" }, include_hidden: false %>

のように、include_hidden: falseを追加してください(Simple formのIssue)。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/03/17 12:06

    ありがとうございます!!!
    <%= f.association :areas, label: 'エリア', as: :check_boxes, input_html: { class: "checkbox" }, include_hidden: false %>

    に変更したら無事に解決できました!!
    本当にありがとうございました!!またよろしくお願いします!!!

    キャンセル

0

[app/views/admin/stylists/new.html.erb]

<div class="col-md-4 col-md-offset-4">
  <%= simple_form_for [:admin, @stylist] do |f| %>
    <div class="form-group">
      <%= f.input :name, label: '名前', input_html: { class: "form-control"}  %>
      <%= f.input :furigana, label: 'ふりがな', input_html: { class: "form-control"} %>
      <%= f.input :email,  label: 'メールアドレス', input_html: { class: "form-control"} %>
      <%= f.input :tel, label: '電話番号', input_html: { class: "form-control"} %>
      <%= f.association :areas, label: 'エリア', as: :check_boxes, input_html: { class: "checkbox" } %>
    </div>
    <div class="form-actions">
      <%= f.button :submit, '確定', disable_with: "Submiting...", class: "btn btn-primary" %>
    </div>
  <% end %>
</div>

<%= f.input :areas, label: 'エリア', collection: Area.all, as: :check_boxes, input_html: { class: "checkbox" } %>
↓↓↓↓↓↓↓
<%= f.association :areas, label: 'エリア', as: :check_boxes, input_html: { class: "checkbox" } %>

に変更したら解決できました・・・

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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