acts-as-taggable-onのtagged_withメソッドで、特定のタグを含む投稿のみを取り出して、一覧画面に表示した際に、投稿フォームのタグ入力部分がレンダリングされなくなってしまいました。(タグ入力部の生成には、Tag-itを使用)
tagged_withで絞り込みを行わずに表示した場合は、正常にレンダリングされます。
※一覧画面と、投稿フォームは横並びの同一画面となっています。
アプリケーションの作りとしては、
一覧画面の投稿のタグがリンクとなっていて、そこをクリックするとパラメータとしてタグ名をコントローラに渡し、タグ名から投稿を絞りこんで表示するといった作りとなっています。
実ソースを抜粋して下記に記載します。
Ruby
1■static_pages_controller.rb 2def home 3 if logged_in? 4 @bookpost = current_user.bookposts.build 5 @feed_items = params[:selected_tag].present? ? current_user.feed.tagged_with(params[:selected_tag]).paginate(page: params[:page]) 6 : current_user.feed.paginate(page: params[:page]) 7 end 8 end 9 10 11■view(フォーム) 12<%= form_for(@bookpost) do |f| %> 13<label>タグ</label> 14<ul id="ctg-tags"></ul> 15<div class="field"> 16 <%= f.text_area :content %> 17</div> 18<%= f.submit "投稿", class: "btn btn-primary" %> 19<% end %> 20 21 22■view(一覧画面) 23<li id="bookpost-<%= bookpost.id %>"> 24 <span class="user"><%= link_to bookpost.user.name, bookpost.user %></span> 25 <span class="content"><%= bookpost.content %></span> 26 <% bookpost.tag_list.each do |tag| %> 27 <span class="<%= tag %>"> 28 <%= link_to "#{tag}", root_path(selected_tag: tag) %> 29 </span> 30 <% end %> 31</li>
非表示時のHTMLのソースコードと正常に表示される時のソースコードも下記に載せます。
HTML
1■非表示時 2<section class="bookpost_form"> 3 <form class="new_bookpost" id="new_bookpost" action="/bookposts" accept-charset="UTF-8" method="post"> 4 <input name="utf8" type="hidden" value="✓" /> 5 <input type="hidden" name="authenticity_token" value="AGJ7g9ebvwcB0tw6kzZaSEpR+mrsk6evcvMAS77GKfUgWgVd5UPHzBlCIEh1MikQPNmLABoC5D8/mP8vAUWyuw==" /> 6 <label>タグ</label> 7 <ul id="ctg-tags"></ul> 8 <div class="field"> 9 <textarea name="bookpost[content]" id="bookpost_content"> 10 </textarea> 11 </div> 12 <input type="submit" name="commit" value="ストック" class="btn btn-primary" data-disable-with="ストック" /> 13 </form> 14</section> 15 16 17■正常時 18正常に表示される時は、<ul id="ctg-tags"></ul>の部分が下記に変化します。 19 20<ul id="ctg-tags" class="tagit ui-widget ui-widget-content ui-corner-all"> 21 <li class="tagit-new"> 22 <input type="text" class="ui-widget-content ui-autocomplete-input" autocomplete="off"> 23 </li> 24</ul> 25<input type="hidden" style="display:none;" value="" name="bookpost[tag_list]">
Tag-itがなぜかうまく働かなくなるのが原因っぽいというところまではわかったのですが、
具体的な解決策が思いつかないという状況です。
お詳しい方、どうか力を貸してください。
よろしくお願いします。
【追記】
すみません、表示ロジックを変更したので追記します。
これまでは、前述したように一覧画面と投稿フォームを横並びの同一コントローラ・同一メソッド・同一ビューに記述していましたが、投稿フォームを同一コントローラ内の別のメソッド・別のビューに分離しました。
その結果、画面遷移した直後は変わらずタグフォーム部分が表示されないのですが、リロード(ブラウザを再読み込み)すると表示されるという状態になりました。
下記に変更後のソースコードを記載します。
Ruby
1■static_pages_controller.rb 2def contibute 3 if logged_in? 4 #本当はここで下記のようにform_forに渡す空のモデルオブジェクトを生成したいが、エラーになってしまうため、viewに直接記述して暫定対応。 5 #余裕のある時に見直す 6 #@bookpost = current_user.bookposts.build 7 else 8 redirect_to signup_path 9 end 10 end 11 12 13■view(フォーム) 14<!-- 本当はform_forの引数にはコントローラで用意した@bookpostを渡すべき --> 15<%= form_for(current_user.bookposts.build) do |f| %> 16<label>タグ・カテゴリー</label> 17<ul id="ctg-tags"></ul> 18<div class="field"> 19 <%= f.text_area :content %> 20</div> 21<%= f.submit "投稿", class: "btn btn-green" %> 22<% end %>
【追記2】
Turbolinksが原因でブラウザが更新されず、
$(document).ready()が期待通り動作しないようでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。