【发布时间】:2017-10-21 10:41:44
【问题描述】:
我已经检查过类似的旧帖子,但我仍然遇到问题。
当我创建一个新列表时,URL 如下所示: http://localhost:3000/listings/new?plan=1
在 form_for 中,当 plan=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
所以我可以将它用作上面表单中的隐藏字段。
当我保存有错误的表单时,我的问题就开始了。 新表单 URL 更改为 http://localhost:3000/listings。 我可以在表单上看到@plan=1:
<input value="1" type="hidden" name="listing[plan]" id="listing_plan" />
,但现在表单显示所有字段(由于这种情况应该隐藏 )
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
我尝试过类似的方法,但没有成功: 渲染 :action => 'new', :plan => @listing.plan 以及其他一些事情
如果出现错误,如何隐藏这些字段?
【问题讨论】:
-
你不能使用
@plan访问计划参数,而是使用params[:plan] -
当我转到第一个链接时,我在新操作中:参数:!ruby/hash:ActiveSupport::HashWithIndifferentAccess 计划:'1' 控制器:列表操作:新但是当我保存对于出现错误,它进入创建:参数:!ruby/hash:ActiveSupport::HashWithIndifferentAccess计划:'1'标题:''允许:错误提交:创建列表控制器:列表操作:创建计划在那里但是当我这样做时在他请求 Create: \@plan = params[:plan] 时,它没有得到 \@plan 的值。为什么?