2016-08-17 97 views
0

,如果我有一个模型,如下所示:在Rails中,如何验证特定控制器操作的模型?

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不工作,但我不知道这是否可能在轨道。

+0

那么,它应该像描述的那样工作。只有你需要在那里传递':post_create_action',我想。 –

回答

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 
+0

呵呵,40分钟前的答案表明它可以在没有任何附加访问器的情况下进行上下文验证。 –

+0

我已经更新了答案。但是在使用上下文验证时,必须明确调用控制器中的validate方法? – webster

+0

'.validate'或'.valid?',是的。另一方面,没有访问器,也没有额外的表单域:) –

相关问题