2

これが私の最初の質問なので、できるだけ具体的にできることを願っていますが、厳しくしないでください。

私は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 %>

両方のボタンが非表示になります!どうしてそんなことができるの!?!

この例では、変数宣言をviews\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

そして、ここに質問自体があります:

チェックアウト画面が表示されているときにサイドバーの[チェックアウト]ボタンをクリックするとどうなりますか?この状況でボタンを無効にする方法を見つけることができますか?(ヒント:コントローラーで設定された変数は、レイアウトとパーシャル、および直接レンダリングされたテンプレートで使用できます。)

さらに詳しい情報が必要な場合は、お問い合わせください。どの程度の詳細を提供するか、またはどの情報が重要かはよくわかりません。

前もって感謝します :-)

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

2012-11-13に127.0.0.1のGET"/assets/logo.png"を開始しました20:33:40+0000提供されたアセット/logo.png-304未変更(1ms)[2012-11-13 20:33: 40]警告コンテンツ-応答本文の長さを判別できませんでした。応答のコンテンツの長さを設定するか、Response#chunked = true * 34 37 * /orders/newを設定します

2012-11-1320:33:49に127.0.0.1のGET"/orders/new"を開始しました+0000OrdersController#newによるHTMLとしての処理←[1m←[36mCartLoad(1.0ms)←[0m←[1mSELECT " carts"。*FROM"carts "WHERE"carts"。"id"=?LIMIT1←[0m[["id"、63]]←[1m←[35m(1.0ms)←[0mSELECT COUNT(*)FROM "line_items"WHERE"line_items"。"cart_id" = 63

4

2 に答える 2

1

問題は欠落してい=ます。代わりに行い<%= %>ます。

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

また、ブールチェックの場合は、 /if(boolean)を入力した場合と同じように評価されます。== truefalse

<%= 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 %>

with(アプリケーションヘルパー内)

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 %>
于 2012-11-13T18:50:30.567 に答える
0

使用済み

<div class="actions">
<% if not @hide_checkout_button %>
<%= button_to 'Checkout', new_order_path, method: :get, class: "checkout" %>
<% end %>
<%= button_to 'Empty cart', cart, method: :delete, data: { confirm: "Are you sure?" }, remote: true %>
于 2021-12-12T17:54:38.093 に答える