我试图让我的验证错误只显示与之相关的消息类型。有三种类型的消息,我使用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。
谢谢!
答案 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