Witam, chcę w swojej aplikcaji wykorzystać możliwość dodawania obiektów podobnych, coś w rodzaju opcji “Add Similar”.
Po wybraniu obiektu w aplikacji mam link w stylu “Dodaj podobny”:
<%= link_to "Dodaj Podobny", similar_video_url %>
routes.rb:
resources :videos do
member do
get :similar
post :create_similar
end
end
Do duplikacji danych używam metody dup
. Po kliknięciu w link “Dodaj Podobny” jestem przekierowany do widoku w którym chciałbym poprawić tytuł, sezon, numer odcinka, link ale reszte rekordow chciałbym pozostawić takich samych jak dla kopiowanego modelu, jak np zdjęcie, kategorie itd…
Metody w kontrolerze:
[code]def similar
@video = Video.find(params[:id])
@similar = @video.dup
@similar.comments.destroy_all #usuwam komentarze jeśli są w kopiowanym obiekcie
respond_to do |format|
format.html #similar.html.erb
format.xml { render :xml => @similar }
end
end
def create_similar
@similar.user_id = current_user
Video.set_hits_counter(@similar.id)
respond_to do |format|
if @similar.save
format.html { redirect_to(@similar, :notice => ‘Video was successfully created.’) }
format.xml { render :xml => @video, :status => :created, :location => @similar }
else
format.html { render :action => “new” }
format.xml { render :xml => @similar.errors, :status => :unprocessable_entity }
end
end
end[/code]
Widok:
[code]<%= form_for @similar, :url => { :action => “create_similar” } do |f| %>
<% if @similar.errors.any? %>
<%= pluralize(@video.errors.count, “error”) %> prohibited this video from being saved:
<ul>
<% @video.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.text_field :title, :size => '61' %>
<%= f.number_field :episode %>
<%= f.collection_select :season_id, Season.all, :id, :number, :prompt => 'Wybierz sezon...' %>
<%= f.text_field :link, :size => '61' %>
undefined method `user_id=' for nil:NilClass
Obiekt @similar nie jest przekazywany do metody “create_similar”. Nie wiem jak to rozwiązać tak aby było to zgodne z Rails 3 i działało poprawnie. Czasami przy kliknięciu w przycisk “Dodaj Podobny” aplikacja mi się wiesza lub przycisk Zapisz nie reaguje.