好吧,过去几个小时我一直在撞墙,试图解决这个问题。我有一个rails电子商务应用程序...商店列出了产品对象,当您将产品添加到购物车(另一个对象)时,它会通过创建line_item对象来添加。当您准备结账时,购物车中的line_items将成为订单。此时,我正在尝试允许客户提供page_url(将使用产品/服务的外部网站)[通过form_for text_field]到每个line_item。为了实现这一点,我创建了一个名为Page_url的新模型,该模型属于该订单。这就是我所遭受的失败(我不断得到控制器错误"未定义的方法`page_url'"):
这是表格:
<%= form_for(@order) do |f| %>
......
<% @items.each do |item| %>
<td><a> Provide the URL the <%= item.product.title %> will be added to</a></td>
<div class="field">
<%= f.fields_for @order, :page_url do |q| -%>
<td> <%= q.label :page_url %>
<%= q.text_field :page_url, size: 80 %>
</td>
<% end %>
</div>
<% end %>
</div>
<div class="actions">
<%= f.submit t('.submit') %>
</div>
<% end %>
orders_controller:
class OrdersController < ApplicationController
skip_before_action :authorize, only: [:new, :create]
include CurrentCart
before_action :set_cart, only: [:new, :create]
skip_before_action :set_order, only: [:create, :update, :destroy]
......
# GET /orders/new
def new
if @cart.line_items.empty?
redirect_to store_url, notice: "Your cart is empty"
return
end
@items = @cart.line_items
@order = Order.new
@page_urls = @order.page_urls
端
.....
def order_params
params.require(:order).permit(:name, :address, :email, :pay_type,
:page_urls_attributes => [:page_url, :product_id,])
end
Pages_url控制器是Rails 4生成的标准控制器
Order.rb:
class Order < ActiveRecord::Base
has_many :line_items, dependent: :destroy
has_many :page_urls, dependent: :destroy
# ...
validates :name, :address, :email, presence: true
validates :pay_type, inclusion: PAYMENT_TYPES
accepts_nested_attributes_for :page_urls
Page_url.rb:
class PageUrl < ActiveRecord::Base
belongs_to :order
我感谢任何帮助,谢谢
答案 0 :(得分:0)
我通常使用simple_form来创建关联,并且效果很好。
这样你就可以<%= f.association :page_urls %>
他们有很好的文档,请在此处查看:https://github.com/plataformatec/simple_form在协会下。
还有一点:
在Order模型中,我会指定类。
has_many :page_urls, dependent: :destroy, :class_name => PageUrl
要使用simple_form创建嵌套表单,请参阅:
https://github.com/plataformatec/simple_form/wiki/Nested-Models
希望这有帮助!