###### tags: `rails` `登録` # rails アプリでの新規データ登録 ## コントローラーの定義の仕方<a id="controller"></a> ```rails= def new @xxx = Xxx.new end def create @xxx = Xxx.new(xxx_params) if @xxx.save redirect_to root_path else render :new end end private def xxx_params params.require(:xxx).permit(:yyyy, :mmmm) end ``` 参考にされている学習教材などでは、`Post.new(yyyy: params[:xxx][:yyyy])`のように、 createメソッドで直接受け取ってデータを登録しましょうみたいなのがあるかもしれませんが、 railsでは直接パラメータを書いてデータを登録するのはセキュリティ的に良くないということで、ストロングパラメータを使うというのが一般的となっております。 ストロングパラメータは上記ソースの中の`private`の中がストロングパラメータとなっています。 ストロングパラメータに関しての詳しい説明は[【Ruby on Rails】ストロングパラメータって何なの?](https://qiita.com/ozackiee/items/f100fd51f4839b3fdca8)に説明がありますので参考にしてみてください ## new.html.erbで記載した内容がの中身(例) - form_tagの場合 ```rails= <%= form_tag( '/create' , method: :post )do %> <label>Title</label> <input type='text' name='post[title]'> <label>Content</label> <input type='text' name='post[content]'> <input type='submit' value='決定'> <% end %> ``` - form_forの場合 ```rails= <%= form_for @post , url: create_path do |f| %> <%= f.label :title %> <%= f.text_field :title %> <%= f.label :content %> <%= f.text_field :content %> <%= f.submit "決定" %> <% end %> ``` 上記はpostテーブルに対して、titleカラムとcontentカラムがある例として行っています。 form_tag & form_for共に同様の結果となりますが、form helperを使用するform_forの書き方に慣れて頂いたほうが短く掛けますし、コントローラーとのやり取りもスムーズなので好ましいと思われす。 (余談ですが、今回はerbファイルを例としておりますので、他拡張子の場合もっと短く書くことも出来ます。) new.html.erbで記載した内容が[controller](#controller)内のcreateメソッドに飛ばされ処理されるという流れになります --------------------- ## Tips うまくデータが登録できないなどが発生した場合は、createメソッドに正しくデータを飛ばせていない可能性が高いです。 ただしくストロングパラメータを定義できているかを確認するためにもメソッド内に下記内容を追記いただき、rails server内にログを出力させてあげるといいしょう ```ruby= p "==============paramsの中身================" p params p "==============paramsの中身================" ``` 上記を記載することでrails serverが立ち上がっているターミナルに下記のような内容が表示されます。 ```bash= "==============paramsの中身================" <ActionController::Parameters {"controller"=>"posts", "action"=>"show", "id"=>"2"} permitted: false> "==============paramsの中身================" ``` パラメータの中身を確認し、どの様にすれば正しい値を取得できるのか試してあげるといいでしょう
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up