我已经检查旧的类似帖子,但我仍然有问题。Rails 5 - 渲染新参数
当我创建一个新上市的URL看起来如下: 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
所以我可以使用它作为上面的窗体上的隐藏字段。
我的问题从保存带有错误的表单开始。 新的表单URL更改为http://localhost:3000/listings。 我可以看到@计划= 1仍是形式:
<input value="1" type="hidden" name="listing[plan]" id="listing_plan" />
,但现在的形式显示了所有领域(这应该是由于隐藏这个条件,如果@plan <%= 1.to_s% >)
行动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
我已经试过类似的东西,但没有成功: 呈现:动作=> '新',:计划=> @ listing.plan 和其他一些东西
如何在错误中隐藏这些字段?
您不能使用'@ plan'访问plan参数,而是使用'params [:plan]' –
当我进入第一个链接时,我在New action中: 参数:!ruby/hash:ActiveSupport :: HashWithIndifferentA CCESS 计划:“1” 控制器:房源 行动:新 但是当我保存与错误它进入创建: 参数:红宝石/哈希:的ActiveSupport :: HashWithIndifferentAccess 计划:“1” 标题:“” 许可:假 承诺:创建清单 控制器:房源 动作:创建 该计划是有,但我做到这一点,他在乞讨时的创建: \ @plan = params [:plan] 它没有得到\ @ plan的值。为什么? – 82skynet