QA@IT

railsでコントローラー内でのインスタンス化について質問です。

3583 PV

初歩的なことですいません。

controller内で、
カラム内のhoge_idをインスタンス化するにはどうすればいいのですか?

"@hoge = Hoge.new(:hoge_id)"

これだと

undefined method `stringify_keys' for :hoge_id:Symbol

と怒られてしまいます。

ちなみに
"@hoge = Hoge.new(params[:hoge_id])"

これだと個人的な理解では、viewのフォームからポストされたものが、入ると思っています。
最終的にやりたいことは、controller内のみで初期値を与えたいです。

イメージでは

"@hoge = Hoge.new(params[:hoge_id] = 1)"

こんな感じ。

  • > controller内で、
    > カラム内のhoge_idをインスタンス化するにはどうすればいいのですか?

    という部分がよくわからないです。

    > イメージでは
    >
    > "@hoge = Hoge.new(params[:hoge_id] = 1)"

    から、推測すると @hoge.hoge で idが 1 の Hoge のインスタンスにアクセスしたいのでしょうか?
    -

回答

もう少し大きな目的がわかれば,回答しやすいと思います。

イメージでは

"@hoge = Hoge.new(params[:hoge_id] = 1)"

こんな感じ。

の、部分からだけで推測しますと、

@hoge = Hoge.new(hoge_id: 1)

で、どうでしょうか。

編集 履歴 (0)

まずは

@hoge = Hoge.new(:hoge_id)

によって何が行われているか理解できるようにクラス、コンストラクタについて学ばれるといいかもしれません。

全体像がよく見えませんので想像の部分が多くなりますが、
単純にユーザーの入力は一旦無視してHogeのインスタンスを新規に作成するのであれば

@hoge = Hoge.new

でよいと思います。その後インスタンスである@hogeのメンバに対して値を格納することになるでしょう。

シンボル:hoge_idですが、名前から見るにidが入ってそうですので

@hoge = Hoge.find(params[:hoge_id])

となるような気がします。

newの場合は

@hoge = Hoge.new(params[:hoge])

などとなりそうな。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。