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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

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

Q&A

解決済

1回答

1478閲覧

formで2つの_idに値を入れる場合について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

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

0グッド

2クリップ

投稿2015/09/14 12:29

どのユーザーが投稿したのか、どのトピックに投稿したのかを知りたいので、
Micropostモデルに2つの1対多を与えています。

class Micropost < ActiveRecord::Base belongs_to :user belongs_to :topic end
class Topic < ActiveRecord::Base has_many :microposts end
class User < ActiveRecord::Base has_many :microposts ・・・ end

topic/showでmicropostの表示、投稿をさせています。

<h2 class="text-center"><%= @topic.title %></h2> <% @microposts.each do |micropost| %> <p><%= micropost.content %></p> <% end %> <%= form_for([@topic, @micropost]) do |f| %> <div class="field"> <%= f.label :content %><br /> <%= f.text_area :content %> </div> <%= f.submit "Post", class: "btn btn-large btn-primary" %> <% end %>

routesは以下のように。

Rails.application.routes.draw do resources :topics, only: [:index, :show, ] do resources :microposts, only: [:create, :destroy] end ・・・ end

microposts_controller、topics_controllerを以下のようにしました。

class MicropostsController < ApplicationController def create @topic = Topic.find(params[:topic_id]) @micropost = @topic.microposts.build(micropost_params) if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else @feed_items = [] render 'topics/show' end end private def micropost_params params.require(:micropost).permit(:content) end end
class TopicsController < ApplicationController def show @topic = Topic.find(params[:id]) @microposts = @topic.microposts @micropost = Micropost.new end end

ここまでやってtopic_idに値を入れられ、topic/1での投稿はtopic/1のみ、
topic/2の投稿はtopic/2のみで閲覧出来るようになったのですが、
自分の知識ではuser_idにも同時に値を入れることが出来ませんでした。

どなたか詳しく教えて頂けないでしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これ、user_idをどこに入れておくかは全体の設計によって変わってくるように思えます。
というか、自明なパラメータとしてどこかに存在しているように思えます。

topic/showのform_for周りが新規micropostの投稿だとすれば、
micropost.userにあたるuserは投稿者、という位置づけになりますよね?

と、考えるならば、事前にログイン操作を行って、
アクセスしているユーザーを特定しているのではないでしょうか?

事前にログイン操作を行っているのであれば、
ログイン状況を保持するためにセッションあたりにログイン中ユーザーのidが格納されているはず。
そのセッション変数を利用してパラメータにセットすればすむはずなので、
フォーム側はuser_idを知っている必要がないのではないでしょうか?

あるいは、topic.user_idをそのまま利用するのであれば、
topicが取得出来た時点でそのパラメータを利用できますし。

あえて必要なら、hidden_fieldを使うという手もありますが、必要ないのでは?

投稿2015/09/25 05:04

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/09/26 14:35

回答ありがとうございます。 ご指摘の通り、そもそも必要がないと理解することが出来ました。 10日も前の質問に回答感謝致します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問