我查过旧的类似帖子,但我仍然遇到问题。
当我创建新的商家信息时,网址如下所示: http://localhost:3000/listings/new?plan=1
在form_for中,我在计划= 1时隐藏了一些字段
<%= form_for(@listing) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.hidden_field :plan, :value => @plan %>
<%= f.label :Title %>
<%= f.text_field :title, class: 'form-control' %>
<!-- don't show description for standard plan -->
<% if @plan != 1.to_s %>
<%= f.label :Description %>
<%= f.text_area :description, :rows => 10,
placeholder: "Describe your business...", class: 'form-control' %>
<% end %>
在ListingsController中,我在行动前设置了计划:
before_action :set_plan, only: [:new, :create]
def set_plan
@plan = params[:plan]
end
所以我可以将它用作上面表格中的隐藏字段。
当我保存表单时出现错误,我的问题就出现了。 新表单网址将更改为http://localhost:3000/listings。 我可以在表格上看到@ plan = 1:
<input value="1" type="hidden" name="listing[plan]" id="listing_plan" />
,但现在表单显示所有字段(由于此条件应该隐藏&lt;%if @plan!= 1.to_s%&gt;)
ListingsController中的操作:
def new
@listing = Listing.new
end
def create
@listing = current_user.listings.build(listing_params) if logged_in?
@plan = @listing.plan
if @listing.save
flash[:success] = "Listing created!"
redirect_to @listing
else
render 'new'
end
end
我尝试过类似的东西,但没有成功: render:action =&gt; &#39; new&#39;,:plan =&gt; @ listing.plan 和其他一些事情
如何在出错时隐藏这些字段?
答案 0 :(得分:0)
您应该可以通过修改ListingsController
来设置创建计划来解决此问题。具体来说,在 ListingsController.rb :
# app/controllers/listings_controller.rb
before_action :set_plan, only: [:new, :create]
另外,请确保您的listing_params
方法允许:plan
。
如果您希望此功能在更新时发挥作用,请同时将:update
添加到before_action
。
答案 1 :(得分:0)
我修好了。
@plan = params[:plan]
返回字符串(当DB中的字段为整数时),所以我将其更改为:
@plan = params[:plan].to_i
现在以下面的表格我所有的行动:
<% if @plan != 1 %>