Ваш вопрос немного расплывчат, потому что неясно, к чему прикреплен bid
или какие другие модели есть в вашем приложении, поскольку вы не говорите.
Однако предположим, что это аукционный сайт, и у аукционов есть ставки. Когда ставка принята
- Все остальные заявки на этом аукционе уничтожены
- Принятая ставка имеет логическое поле
accepted
, установленное на true
.
Если это близко к тому, что вы пытаетесь сделать, то код ниже должен это сделать.
в app/controllers/bids_controller.rb
# PUT /bids/:id/accept
def BidsController < ApplicationController
def accept
@bid = Bid.find(params[:id])
@bid.update_attribute(:accepted, true)
@bid.auction.bids.each do |rejected_bid|
rejected_bid.destroy unless rejected_bid == @bid # destroys all be the accepted bid
end
flash[:notice] = "Bid accepted."
respond_to do |format|
format.html { redirect_to "/mybids" }
format.json { head :no_content }
end
end
end
Затем вам нужно добавить маршрут для этого действия в ваш файл config/routes.rb
. Что-то вроде ...
resources :bids do
put :accept, :on => :member
end
Сформируйте вид, вы бы связались с этим маршрутом так:
link_to "accept", accept_bid_path(@bid)
И если вы звоните rake routes
из командной строки, вы должны увидеть запись, которая выглядит следующим образом:
accept_bid PUT /bids/:id/accept(.format) {:action=>"accept", :controller=>"bids}