Ruby on rails 3 3 rails中的模型关联3
我正在开发分类门户,其中我有以下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
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 %>