операторы if-else в представлении - PullRequest
1 голос
/ 24 октября 2011
<% form_for :customer, :url => {:action => :save_order} do |f| %>
    <%= f.error_messages %>

<%= f.label :"Select Payment Method" %>
<%= f.select :payment_method, [['Cash','cash'],['Credit Card','credit card']] %>

<p>
    <%= f.label :customer_first_name %><br />
    <%= f.text_field :first_name %>
</p>


<p>
    <%= f.label :customer_last_name %><br />
    <%= f.text_field :last_name %>
</p>


<p>
    <%= f.label :email_address %><br />
    <%= f.text_field :email %>
</p>
    <% if @customer.payment_method == "Credit Card" %>

<p>
    <%= f.label :credit_card %><br />
    <%= f.text_field :credit_card_number %>
</p>

  <% else %>
  <% end %>
    <%= f.submit "Place Order"%>

Вот мой код.Я просто хочу, чтобы поле номера кредитной карты появлялось, когда пользователь выбирает кредитную карту в качестве способа оплаты.Но когда я выбираю кредитную карту в выпадающем меню, ничего не происходит.Спасибо за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 24 октября 2011

Ваш оператор if будет работать на стороне сервера, но вам нужна логика на стороне клиента, чтобы ответить на изменения в раскрывающемся списке. Вы могли бы показать кредитную карту «p» независимо, но сначала скрыть ее с помощью CSS, а затем создать jQuery, похожий на этот -

$("payment_method").change(function () {
    if ($(this).val() == "credit card") $(".creditcard").show();
})
1 голос
/ 24 октября 2011

Вам нужно использовать Javascript для решения этой проблемы.То, что вы пытаетесь, не работает, потому что код анализируется на стороне сервера один раз.

Вот Railscast, который имеет дело с simmilar Проблема:

http://railscasts.com/episodes/88-dynamic-select-menus

Вы можете перенести методы в вашу задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...