現在音楽サイトみたいなものを作りたいと考えていて、sound_post, micropost, userモデルができています。
soundpostは音楽でmicropostはコメントのような感じです。
モデル間の関連付けなどは終わらせています。
私はindexページで曲をそれぞれ表示し、その曲にコメントするボックスと、コメントを投稿するボタンを作りたいと考えていています。
お気に入りの機能と似てるなと勝手に判断し、それを参考にajaxでボタンで投稿画面を開ける!みたいなものを作ってみたかったのですが、手に負えず一旦断念し、今はボタンを作って下にそのままコメントできるようにしています。
悩んでいる点
sound_postのidを取得してuser_idも持ったmicropostを作りたいのですが、下のようにやると同じsound_post_idしか取得できません。また、そのidをずっと引き継いで投稿してしまいます。(idがいらない場合でも)
自分的にはform_forでうまくできてないのかなと思いつつも直し方もわからず詰んでます...
@micropost = @sound_post.microposts.build...の部分も@sound_postが固定されていることで@sound_postに基づいたものしか作れないのかな、などと考えても見ましたが今の所理解不能です。
最終的にはsound_post情報がいらない場合は何も取らずmicropostを作り、sound_postに基づいたmicropostを作るときはidを取ってこれるように2つの状態を作りたいです。
なかなか調べても自分と似たような記事が見つかりません!一緒に考えていただけると光栄です、よろしくお願いします!
sound_posts/index.html.erb <% @sound_posts.each do |sound_post| %> <tr> <td><%= sound_post.title %></td> <td><%= sound_post.content %></td> <td><%= audio_tag sound_post.sound, :controls => true %> </td> <%= render 'sound_posts/sound_post', sound_post: sound_post %> <% if current_user %> <td style='text-align:right;'> <%= link_to 'Edit', edit_sound_post_path(sound_post), class: 'btn btn-default btn-xs' %> <%= link_to 'Destroy', sound_post, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-xs btn-danger' %> </td> <% end %> </tr> <% end %>
_sound_post.html.erb <td class="sbutton"> <%= form_for(sound_post.microposts.build, remote: true) do |f| %> <div><%= hidden_field_tag :sound_post_id, sound_post.id %></div> <%= button_tag(class: "btn btn-default btn-xs") do %> <%= content_tag :span, "post" %> <% end %> <%= f.text_area :content, placeholder: "Compose new post..." %> <% end %> </td>
microposts_controller.rb def create @sound_post = SoundPost.find_by(params[:id]) @micropost = @sound_post.microposts.build(micropost_params) @micropost.user_id = current_user.id if @micropost.save flash[:success] = "投稿しました" redirect_to root_url else @feed_items = [] render 'static_pages/home' end end def micropost_params params.require(:micropost).permit(:content, :sound_post_id) end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/18 17:59
2018/09/19 22:29
2018/09/20 11:42
2018/09/21 06:16