我已經檢查舊的類似帖子,但我仍然有問題。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