0

2012 年 6 月 21 日更新

電子商取引のチェックアウトと同様に機能するレールのフォームがあります。

ユーザーは、フォームで開始時間、終了時間、日付、時間、および価格設定 (時間単位、週単位、日単位など) を選択します。製品には既にデータベースに設定された価格 (時間単位、週単位、日単位など) があり、価格設定に基づいて変更し、残りのフォームと共に送信したいと考えています。

動的選択メニューでライアンのスクリーンキャストをフォローしてきましたが、ユーザーに価格だけを選択させたくないので(毎日/毎時/など)、彼のデモをアプリケーションにどのように適合させるかわかりませんでした.)

ギア has_many line_items line_items はギアとカートに属しています

以下は私のコードです:

Gear Model (価格変数を作成した場所)

class Gear < ActiveRecord::Base
  attr_accessible :title, :size, :price, :sub_category_id, :user_id, :image, :image_a, :remote_image_url, :color, :year, :latefee, :cancellation, :minrental, :policy, :about, :address, :city, :state, :zip
  belongs_to :user
  belongs_to :sub_category
  has_one :category, :through => :sub_category
  has_many :comments, :dependent => :destroy 
  has_many :line_items
  has_many :calendars
  require 'carrierwave/orm/activerecord'
  mount_uploader :image, GearpicUploader
  mount_uploader :image_a, GearpicUploader
  before_destroy :ensure_not_referenced_by_any_line_item

  validates :title, presence: true
  validates :size,  presence: true
  validates :price, presence: true
  validates :sub_category_id, presence: true
  validates :user_id, presence: true

  def hourly_price
    price/24
  end

  def weekly_price
    price*7
  end

  def monthly_price
    weekly_price*4
  end
end

意見

<div class="gearside_date_top">
    <%= form_for LineItem.new do |f| %>
    <p><%= render :partial => "price" %> / 
        <%= f.select :day_or_hour, [['day', 1], ['hour', 2]], :id => 'day_or_hour' %>
    </p>
</div>      

ビューに部分的に与えられた

<em>from</em>
<span id="gear_daily" style="font-size: 190%; color: #94cbfc;">$<%= @gear.price %></span>
<span id="gear_hourly" style="font-size: 190%; color: #94cbfc; display:none;">$<%= @gear.hourly_price %></span>

Javascript

$('#day_or_hour').change(function() {

     var $index = $('#day_or_hour').index(this);

     if($('#day_or_hour').val() = '2') { 
     $('#gear_hourly').show(); 
     } 
     else {
     $('#gear_daily').show();//else it is shown

     }
});

私はそれを機能させることができないようです。

4

1 に答える 1

1

価格を部分的に入れることができます:

<div class="gearside_date_top">
  <%= form_for LineItem.new do |f| %>
  <%= render :partial => "price" %>
  <%= f.select :day_or_hour, [['day', 1], ['hour', 2]], :id => 'day_or_hour' %>

_price.html.erb

<em>from</em><span style="font-size: 190%; color: #94cbfc;">$<%= @gear.price %></span>

line_item.js に価格を更新するコードを入れます: line_item.js

$('#day_or_hour').change(function() {
  $.get("/cart/update_price", {option: $(this).val()}, function(data) {
  }
}

cart_controller.rbで、line_item.rb total_priceを呼び出すメソッド update_price を作成します。

ご理解いただければ幸いです。

編集

このようなものになります。

def update_price
  @gear.price = LineItem.total_price(@gear)
  render :partial => 'price'
end
于 2012-06-14T18:06:24.947 に答える