在特定于输入类型的视图中呈现验证错误时遇到问题

时间:2014-03-14 16:53:09

标签: validation ruby-on-rails-4 partials

我试图让我的验证错误只显示与之相关的消息类型。有三种类型的消息,我使用javascript来显示或隐藏正确的类型。我试图使用特定于类型的实例变量,但是当验证失败时,它无法正确读取我的实例变量。

我的控制器功能目前如下:

def create
    @user = current_user
    @errors = "errors"

    @sassy  = SassyWish.new
    @nice   = NiceWish.new
    @blank  = BlankWish.new

    if params[:sassy_wish]
        @wish = SassyWish.new sassy_params
    elsif params[:nice_wish]
        @wish = NiceWish.new nice_params
    elsif params[:blank_wish]
        @wish = BlankWish.new blank_params
    else
        render :new
    end

    @wish.save
    if @wish.errors.any?
        render :new
        @user = current_user
        if @wish._type = "SassyWish"
            @sassyErrors = @errors
        elsif @wish._type = "NiceWish"
            @niceErrors = "errors"
        elsif @wish._type = "BlankWish"
            @blankErrors = "errors"
        else
            @errors
        end
    else
        redirect_to wishes_url
    end
end

我的观点

<div class="gw_wish">
  <div class="gw_newWish">
    <div class="gw_start gw_new"></div>
    <div class="gw_newSassy gw_new">
      <%= render partial: @sassyErrors %>
         <%= render partial: "sassyWish" %>
    </div>
    <div class="gw_newNice gw_new">
        <%= render partial: "niceWish" %>
    </div>
    <div class="gw_newBlank gw_new">
        <%= render partial: "blankWish" %>
    </div>
  </div>
</div>

我希望错误显示在每个愿望类型中,这样当您从一个愿望类型到另一个愿望类型时,它不会显示愿望类型是否与提交的愿望类型不匹配。

目前我收到的错误是:&#39; nil&#39;不是与ActiveModel兼容的对象。它必须实现:to_partial_path。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用==代替=。您收到错误,因为@sassyErrors设置为nil。由于条件不正确,它没有被设定。同样适用于@niceErrors@blankErrors

if @wish.save   ## Check if record was saved successfully or not
    redirect_to wishes_url
else    
    @user = current_user
    if @wish._type == "SassyWish"
        @sassyErrors = @errors
    elsif @wish._type == "NiceWish"
        @niceErrors = "errors"
    elsif @wish._type == "BlankWish"
        @blankErrors = "errors"
    else
        @errors
    end
    render :new
end