2016-08-17 93 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?',是的。另一方面,沒有訪問器,也沒有額外的表單域:) –

相關問題