ruby on rails - How can I add a related record whilst on its parents edit page? -
ruby on rails - How can I add a related record whilst on its parents edit page? -
i have table of venues , offers. each venue can have have many offers.
i able add together offers venues venues edit page. far have (code below) giving "nomethoderror in venues#edit, undefined method `model_name' nilclass:class" error.
venues edit page (the div id="tabs-3" container in accordion)
<div id="tabs-3"> <%= form_for [@venue, @offer] |f| %> <h2 class="venue_show_orange">offers</h2> <%= f.fields_for :offers |offer| %> <div class="add_offer"> <%= offer.text_field :title %><br> </div> <div class="button"><%= submit_tag %></div> <% end %> <% end %> </div>
offers controller
class offerscontroller < applicationcontroller def new @offer = offer.new end def create @offer = @venue.offers.create!(params[:offer]) @offer.venue = @venue if @offer.save flash[:notice] = 'offer added' redirect_to offers_path else render :action => :new end end def edit @offer = offer.find(params[:id]) end def update @offer = offer.find(params[:id]) @offer.attributes = params[:offer] if @offer.save! flash[:notice] = 'offer updated successfully' redirect_to offers_path(@offer) end end end
venues controller (nothing offer related in here - i'm going wrong?)
class venuescontroller < applicationcontroller protect_from_forgery :only => [:update, :delete, :create] load_and_authorize_resource def new @venue = venue.new 5.times { @venue.venuephotos.build } end def create @venue = venue.new params[:venue] if @venue.save flash[:notice] = 'venue added' redirect_to venues_path else render :action => :new end end def edit @venue = venue.find(params[:id]) 5.times { @venue.venuephotos.build } end def update @venue = venue.find(params[:id]) @venue.attributes = params[:venue] if @venue.save! flash[:notice] = 'venue updated successfully' redirect_to :back end end end
any help much appreciated much!
edit
venues edit page
<div id="tabs-3"> <%= form_for @venue |f| %> <div class="edit_venue_details"> <h2 class="venue_show_orange">offers</h2> <%= render :partial => 'offers/offer', :collection => @venue.offers %> <div class="clearall"></div> <h2 class="edit_venue_sub_header">add new offer</h2> <%= f.fields_for :offers |offer| %> <% if offer.object.new_record? %> <p class="edit_venue">title: <br> <%= offer.text_field :title, :class => "edit_venue_input" %></p> <% end %> <% end %> </div> <button class="submit_button" type="submit"> save changes</button> <% end %> </div>
whats beingness displayed
however if add together new offer, display correctly:
some remarks:
1) replace:
<%= form_for [@venue, @offer] |f| %>
with:
<%= form_for @venue |f| %>
because offers
info updated through related venue
, 1 controller action handle form.
2) if want add together unexisting offers
in form, shoud instantiate them way did venuephotos
3) show venue
model. should have @ least:
accepts_nested_attributes_for :offers
ruby-on-rails activerecord
Comments
Post a Comment