Ruby on rails 3 3 rails中的模型关联3

Ruby on rails 3 3 rails中的模型关联3,ruby-on-rails-3,associations,rails-activerecord,Ruby On Rails 3,Associations,Rails Activerecord,我正在开发分类门户,其中我有以下3个模型 User (name,email) Advertisement (title,body,user_id) Bid (user_id,ad_id,price) 我在用户和广告之间有如下联系 class User < ActiveRecord::Base has_many :advertisements end class Advertisement < ActiveRecord::Base belongs_to :user end

我正在开发分类门户,其中我有以下3个模型

User (name,email)
Advertisement (title,body,user_id)
Bid (user_id,ad_id,price)
我在用户和广告之间有如下联系

class User < ActiveRecord::Base
  has_many :advertisements
end

class Advertisement < ActiveRecord::Base
  belongs_to :user 
end
class用户
现在我想定义投标模型,我想这就是它应该是什么样子

class Bid < ActiveRecord::Base
  belongs_to :user
  belongs_to :advertisement
end
class-Bid
我应该补充很多:用户和广告模式中的出价(我也这么认为)

现在我的问题是,假设用户已登录,他想竞拍一些广告,那么在广告显示页面上,我应该如何集成此竞拍表单,请允许我如何为此定义路由

轨道3.2.13

Ruby 2.0.0p0


谢谢

如果我没说错的话,你可能想要的是一块宝石,因为它可以完全满足你的需要。我说您可能必须使用嵌套表单,因为按照您所说的,一个
用户
拥有许多:出价
,这是正确的。为了让出价接受来自用户的属性,您需要在出价模型上为:user
设置
接受\u嵌套的\u属性。试图为你一起模仿一个例子

<%= form_for bid do |f| %>
  <%= fields_for :user do |user_fields| %>
    <%= user_fields.label :name %>
    <%= user_fields.text_field :name %>
  <% end %>
  <%= f.label :product %>
  <%= f.text_field :product %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>


相关链接:

看看你的应用程序的业务逻辑,有两个故事你必须实现

1) 用户可以创建广告(优惠)(这就是您在广告中添加用户id的原因)

2) 用户可以对广告进行竞价(这很简单:通过关联)

您需要在AdvertisementsController中创建自定义操作,该控件将执行以下操作:

def bid
  @advertisement = Advertisement.find(params[:id])
  current_user.bids << Bid.new(advertisement: @advertisement, value: params[:bid])
  # you may also add some value column in bids table, thats up to you
  redirect_to @advertisement
end
def出价
@advision=advision.find(参数[:id])
当前用户出价

感谢您的回复,我将查看此宝石。感谢您的描述性回答,让我试试。
a = Advertisement.last
a.author
  User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
 => #<User id: 1, created_at: "2013-05-31 06:13:20", updated_at: "2013-05-31 06:13:20"> 
a.users
  User Load (0.1ms)  SELECT "users".* FROM "users" INNER JOIN "bids" ON "users"."id" = "bids"."user_id" WHERE "bids"."advertisement_id" = 2
 => [#<User id: 1, created_at: "2013-05-31 06:13:20", updated_at: "2013-05-31 06:13:20">, #<User id: 1, created_at: "2013-05-31 06:13:20", updated_at: "2013-05-31 06:13:20">]
resources :advertisements do
  member do
    post 'bid'
  end
end
def bid
  @advertisement = Advertisement.find(params[:id])
  current_user.bids << Bid.new(advertisement: @advertisement, value: params[:bid])
  # you may also add some value column in bids table, thats up to you
  redirect_to @advertisement
end
<%= form_tag(bid_advertisement_path(@advertisement), :method => "post",) do %>
  <%= label_tag(:bid, "Make a bid:") %>
  <%= text_field_tag(:bid) %>
  <%= submit_tag("Submit") %>
<% end %>