在Rails中,如何验证特定控制器操作的模型?

时间:2016-08-17 07:56:30

标签: ruby-on-rails activerecord controller

如果我的模型如下所示:

class Post < ActiveRecord::Base
  validate :content, presence: true, on: :post_create_action
end

class PostsController < ApplicationController
  def create
   @post = Post.new(post_params)
   if @post.validate(:post_index_action) && @post.save
     redirect_to post_path(@post)
   end
  end
end

我知道@ post.validate不能像我在代码中描述的那样工作,但我想知道这是否可以在rails中使用。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

您可以使用lambda

实现此功能

<强>模型/ post.rb

class Post < ActiveRecord::Base
  attr_accessor :post_creation
  validate :content, presence: true, if: lambda { self.post_creation == true }
end

<强>控制器/ posts_controller.rb

class PostsController < ApplicationController
  def create
   @post = Post.new(post_params)
   if @post.save
     redirect_to post_path(@post)
   else
     # Handle the validation errors
   end
  end

  private

  def post_params
    params.require(:post).permit(....).merge(post_creation: true)
  end
end