2012-11-13 54 views
1

這是我的第一個問題,所以我希望我可以儘可能具體,但不要苛刻。滑軌中隱藏按鈕(使用Rails進行敏捷Web開發)

我正在通過Rails進行敏捷Web開發,並且對編程非常新穎。

我想在訂單/新頁面上隱藏「結帳」按鈕,以便它無法爲用戶購買任何令人討厭的內容。

目前,我不太瞭解實例變量是如何工作的,因爲無論我在哪裏聲明實例變量,在視圖中還是在orderscontroller#new中,它總是驗證爲true。

這似乎是這樣的,因爲當我在視圖中使用實例變量來隱藏div(使用hidden_​​div_if(condition == true))時,按鈕總是隱藏起來!

不僅如此,但是當我做:

<%= hidden_div_if(@hide_checkout_button == false) do %> 
<td><%= button_to 'Empty cart', cart, :method => :delete, 
        :confirm => 'Are you sure?' %></td> 
<% end %> 
<%= hidden_div_if(@hide_checkout_button == true) do %> 
    <td><%= button_to "Checkout", new_order_path, :method => :get %></td> 
<% end %> 

兩個按鈕獲得隱患!怎麼可能!?!

在這個例子中,我把意見中的變量聲明\ orders_form.html.erb:

<%= @hide_checkout_button = true %> 
<%= form_for(@order) do |f| %> 
    <% if @order.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@order.errors.count, "error") %> 
     prohibited this order from being saved:</h2> 

     <ul> 
     <% @order.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    ... 

這裏有一個討論,論壇,對於這個問題的解決方案,但他們沒有對我的工作我不知道爲什麼:http://pragprog.com/wikis/wiki/Pt-G-2/version/35

這裏是問題本身:如果您單擊而 側邊欄Checkout按鈕,會發生什麼

結帳屏幕已經顯示?你能找到一種方法來在這種情況下禁用 按鈕嗎? (提示:在控制器 設置變量在佈局和諧音,以及在直接呈現 模板可供選擇。)

如果您需要更多的信息來幫助請問,我不太清楚如何提供很多細節或什麼信息是重要的。

在此先感謝:-)

def new 
    @cart = current_cart 
    if @cart.line_items.empty? 
     redirect_to store_url, :notice => "Your cart is empty" 
     return 
    end 

    puts 34 
    @hide_checkout_button = true 
    @order = Order.new 
    puts 37 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @order } 
    end 
    end 

入門GET 「/assets/logo.png」 爲127.0.0.1在二零一二年十一月十三日20時33分四十秒+0000 擔任資產/ logo.png - 304未修改(1ms) [2012-11-13 20:33:40] WARN無法確定響應主體的內容長度。響應的 集內容長度或設置迴應#分塊=真 * * /命令/新

發起者GET 「/命令/新的」 127.0.0.1在二〇一二年十一月十三日20:33:49 +0000 OrdersController處理#新的HTML ←[1m←[36mCart Load(1.0ms)←[0m←[1mSELECT「carts」。* FROM「carts」WHERE「carts 」。「id 「=? LIMIT 1←[0m [[「id」,63]] ←[1m←[35m(1.0ms)←[0m SELECT COUNT(*)FROM「line_items」WHERE「line_items」。「c art_id」= 63

+1

只是一小塊骨頭挑。敏捷是一種開發方法,不是軌道技術。它決定了你如何處理開發問題,但與你提供的代碼爲什麼工作或不工作沒有任何關係。 – gbtimmon

+0

此外提示不是100%準確的:'實例變量'是可用的,'局部變量'不是 –

+0

@gbt,它的書名(這就是爲什麼它是大寫的)不是我的描述 - 感謝評論 –

回答

0

問題是遺失的=。改爲<%= %>

<%= hidden_div_if(@hide_checkout_button == true) do %> 
    <td><%= button_to "Checkout", new_order_path, :method => :get %></td> 
<% end %> 

另外,對於布爾檢查,你可以做if(boolean),如果你把==true/false

<%= hidden_div_if(@hide_checkout_button) do %> 
    #... 
<% end %> 

這將同樣地進行評價您想設置調用視圖的方法變。在這種情況下,它是在new方法OrdersController

def new 
    @hide_checkout_button = true 
end 

編輯:

它添加到隱藏的div只是爲了看它是否有助於發現元素的屬性設置爲

<%= hidden_div_if(@hide_checkout_button, id: 'cart') do %> 

帶(在應用幫手中)

def hidden_div_if(condition, attributes = {}, &block 
    if condition 
    attributes["style"] = "display: none" 
    end 
    content_tag("div", attributes, &block) 
end 

如果不這樣做,那麼就這樣做吧

<% if @hide_checkout_button %> 
    <td><%= button_to "Checkout", new_order_path, :method => :get %></td> 
<% else %> 
    <td><%= button_to 'Empty cart', cart, :method => :delete, :confirm => 'Are you sure?' %></td> 
<% end %> 
+0

嗨,感謝您的回覆, That =他們倆都出現在所有的時間。我承認這是一個錯誤,但是我做錯了一些事情。 我在orderscontroller#new中和在按鈕周圍的hidden_​​div_if方法中有實例變量。但是,當我「get」new_order_path後,「結帳」按鈕在結帳頁面仍然可見。 –

+0

'new_order_path'將會觸及'new'方法,然後是視圖。要測試你有正確的值打印在視圖之前的div。顯示該方法。 –

+0

​​<%= print new_order_path%> 所以這就是我放在按鈕之間,我得到了一個空白區域。它還在IDE中表示[squiggly grey underline]「找不到new_order_path」,但我愚蠢地忽略了這一點,因爲Rubymine IDE說了我不明白的所有事情,並且它沒有停止任何事情被保存到訂單或者應用程序鏈接到我的瀏覽器中的新訂單頁面。 任何想法?我無法理解如何在orderscontroller中找不到新方法,如果這是問題... –

相關問題