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

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

ただいまの
回答率

92.15%

  • Ruby on Rails 4

    1539questions

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

  • SQLite

    257questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

  • Devise

    107questions

    Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

  • タグ

    28questions

    特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

deviseにacts-as-taggable-onでタグを実装。~配列のパラメータを実装したい~

解決済

回答 1

投稿 2016/12/06 18:28 ・編集 2016/12/07 13:01

  • 評価
  • クリップ 0
  • VIEW 137

s.k

score 144

よろしくお願いします。

前提・実現したいこと

deviseを使ったUserモデルにacts-as-taggable-onでタグを実装したいです。

エラー内容

タグが表示されません。

実行手順

①タグリスト追加
②テキストフィールドの用意
③deviseのStrongParametersを調整
④viewファイルの用意

結果の予想

users/show.html.erb上にタグが表示されます。

実際の結果

タグが表示されません。
エラー表示もでません。

ステップ明記

③deviseのStrongParametersを調整ではないかと思います。

devise専用の配列パラメーターをgithubなどを参考に実装しています。

【before】
/application_controller.rb

def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :shopname, :image])
        devise_parameter_sanitizer.permit(:account_update, keys: [:username, :shopname, :image, :area, :birth, :portfolio, :profile, :job, :language, :logic, :link, :gender, :image, :header, ★{:skills_list => []}, {:interests_list => []}★])
      end

【after】
/application_controller.rb

def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :shopname, :image])
     devise_parameter_sanitizer.permit(:account_update) do |u|
      u.permit(:email, :password, :password_confirmation, ~~~~~ {:skills_list => []}, {:interests_list => []})
  end
      end

文献の引用

■deviseのストロングパラメータに配列を追加する実装手順
Allowing users to select tags on sign up form using acts-as-taggable-on
In rails 4, how can I manipulate strong parameters before creation?
Rails - Devise/Acts-as-taggable-on Gems - Make tag ownership unique to a user?
mbleigh/acts-as-taggable-on
■acts-as-taggable-onの実装手順
Railsでacts-as-taggable-onを使ってタグ管理を行う
plataformatec/devise

ソース

①タグリスト追加
【user.rb】

##Tag
  acts_as_taggable_on :skills, :interests
  acts_as_taggable

②テキストフィールドの用意
【users/registration/edit.html.erb】

        ・
        ・
  <div class="field">
    <%= f.label :skill_list, "スキル・特技(カンマ区切り)" %><br>
    <%= text_field_tag 'user[skill_list]', @user.skill_list.join(',') %>
  </div>
  <div class="field">
    <%= f.label :interest_list, "興味・関心(カンマ区切り)" %><br>
    <%= text_field_tag 'user[interest_list]', @user.interest_list.join(',') %>
  </div>
       ・
       ・

③deviseのStrongParametersを調整
/application_controller.rb

def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :shopname, :image])
     devise_parameter_sanitizer.permit(:account_update) do |u|
      u.permit(:email, :password, :password_confirmation, ~~~~~ {:skills_list => []}, {:interests_list => []})
  end
      end

④viewファイルの用意
【users/show.html.erb】

<table>
  <thead>
    <tr>
      <th>名前</th>
      <th>スキル・特技</th>
      <th>興味・関心</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td><%= @user.username %></td>
        <td><%= render 'users/tag_list', tag_list: user.skill_list %></td>
        <td><%= render 'users/tag_list', tag_list: user.interest_list %></td>
        <td><%= link_to 'Show', user %></td>
      </tr>
    <% end %>
  </tbody>
</table>

環境

devise (4.2.0)
rails (5.0.0.1, 4.2.5)
acts-as-taggable-on (4.0.0)

見てご助言いただければ光栄です。

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

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

check解決した方法

0

データはパラメータを通っていました。
エラーになっていたのは、表示の部分でした。

④viewファイルの用意 
【users/show.html.erb】

<table>
  <thead>
    <tr>
      <th>名前</th>
      <th>スキル・特技</th>
      <th>興味・関心</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td><%= @user.username %></td>
        <td><%= render 'users/tag_list', tag_list:@user★.skill_list %></td> →userから@userに
        <td><%= render 'users/tag_list', tag_list:@user★.interest_list %></td> →userから@userに
        <td><%= link_to 'Show', user %></td>
      </tr>
    <% end %>
  </tbody>
</table>

投稿 2016/12/07 13:04

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

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

ただいまの回答率

92.15%

関連した質問

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

  • Ruby on Rails 4

    1539questions

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

  • SQLite

    257questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

  • Devise

    107questions

    Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

  • タグ

    28questions

    特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

閲覧数の多いSQLiteの質問