2017-10-21 113 views
0

我已經檢查舊的類似帖子,但我仍然有問題。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 和其他一些東西

如何在錯誤中隱藏這些字段?

+0

您不能使用'@ plan'訪問plan參數,而是使用'params [:plan]' –

+0

當我進入第一個鏈接時,我在New action中: 參數:!ruby/hash:ActiveSupport :: HashWithIndifferentA CCESS 計劃:「1」 控制器:房源 行動:新 但是當我保存與錯誤它進入創建: 參數:紅寶石/哈希:的ActiveSupport :: HashWithIndifferentAccess 計劃:「1」 標題:「」 許可:假 承諾:創建清單 控制器:房源 動作:創建 該計劃是有,但我做到這一點,他在乞討時的創建: \ @plan = params [:plan] 它沒有得到\ @ plan的值。爲什麼? – 82skynet

回答

0

您應該可以通過修改您的ListingsController來設置創建計劃來解決此問題。具體而言,在ListingsController.rb

# app/controllers/listings_controller.rb 
before_action :set_plan, only: [:new, :create] 

另外,還要確保您的listing_params方法允許:plan

如果您希望此功能在更新時運行,請將:update添加到您的before_action中。

+0

嗨,湯姆,我試過,但沒有運氣,計劃允許params。創建之前的Set_plan沒有傳遞任何值,所以我在Create - \ @ plan = \ @ listing.plan中添加了這一行(請參閱編輯的問題)。我可以在提交的表單上看到錯誤的值 - ,所以我不明白爲什麼IF不會沒有工作 – 82skynet

0

我修好了。

@plan = params[:plan] 

被返回的字符串(當數據庫字段爲整數),所以我把它改爲:

@plan = params[:plan].to_i 

現在的形式我有下面的所有操作:

<% if @plan != 1 %> 
+0

非常好。真高興你做到了。 –