LoginSignup
0
0

More than 1 year has passed since last update.

Rails controllerでdef newでインスタンス変数を定義する意義。

Posted at

スクリーンショット 2021-06-18 16.44.57.png
記事にタグ付けをする簡単なアプリを作っていたところで、エラーが出ました。

スクリーンショット 2021-06-18 16.44.57.png

app/controllers/tweets_controller.rb
class TweetsController < ApplicationController
  def index
    @tweets = Tweet.all.order(created_at: :desc)
  end

  def create
    @tweet = TweetsTag.new(tweet_params)
    if @tweet.valid?
      @tweet.save
      return redirect_to root_path
    else
      render "new"
    end
  end

  private

  def tweet_params
    params.require(:tweets_tag).permit(:message, :name)
  end
end
app/models/tweets_tag.rb
class TweetsTag

  include ActiveModel::Model
  attr_accessor :message, :name

  with_options presence: true do
    validates :message
    validates :name
  end

  def save
    tweet = Tweet.create(message: message)
    tag = Tag.where(name: name).first_or_initialize
    tag.save

    TweetTagRelation.create(tweet_id: tweet.id, tag_id: tag.id)
  end

end

動きとしては投稿したときにストロングパラメーターでtweets_tagモデルに:message, :nameをpermitで値を渡します。

そしてapp/models/tweets_tag.rbが走るわけです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0