Rails 3.1.3 I have tables, Video and Script having association, Video 1 --- n Script So, every Script needs the parent id, in this case, video_id. If I simply create a new Script instance, the view renders as follows. <%= render :partial => "new_script", :locals => { :script => Script.new(:video_id => @video.id)} %> which works fine. Now I would like to develop further. The Script objects may have already existed and if so, I want to update after editing them. So I tried, <%= render :partial => "create_or_update_script", :locals => { :script => Script.find_or_create_by_video_id(:video_id => @video.id)} %> renders a partial, <%= form_for script, :url=>{:controller=>''scripts'', :action=>''create_or_update''}, :remote => true do |f| %> <%= f.hidden_field :video_id %> <%= f.text_field :startp, :readonly => true %> <%= f.text_field :text %> <%= f.submit "create_or_update" %> <% end %> But this will set "Script id" to be "Video id", which are supposed to be distinct from each other. I assume the problem is the way I use "create_or_update". Could anyone tell me where the problem is and hopefully the solution? Thanks in advance. soichi -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 22.02.2012, at 6:33, Soichi Ishida wrote:> Rails 3.1.3 > > I have tables, Video and Script having association, > > <%= render :partial => "create_or_update_script", > :locals => { :script => Script.find_or_create_by_video_id(:video_id => > @video.id)} %>.find_or_create_by_video_id(@video.id) But in general, operating any ActiveRecord model from a view is a bad idea because of rendering speed. All models should be ready to be accessed before ActionView - in controller - that would be much much faster. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks for your answer.> > But in general, operating any ActiveRecord model from a view is a bad > idea because of rendering speed. All models should be ready to be > accessed before ActionView - in controller - that would be much much > faster.Can you (or anyone) give me more specific examples? The segments of actual codes or links to those that show such examples will be appreciated. soichi -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 22.02.2012, at 15:07, Soichi Ishida wrote:> Thanks for your answer. > >> >> But in general, operating any ActiveRecord model from a view is a bad >> idea because of rendering speed. All models should be ready to be >> accessed before ActionView - in controller - that would be much much >> faster. > > > Can you (or anyone) give me more specific examples? > The segments of actual codes or links to those that show such examples > will be appreciated.class ScriptsController < ApplicationController def new_or_edit_by_video @video = Video.find(params[:video_id]) # This is helpful if the :video_id is invalid video, raises ActiveRecord::RecordNotFound @script = Script.find_or_create_by_video_id(@video.id) # or more optimized approach # @script = @video.scripts.first||@video.scripts.build # or .build_script if :has_one instead of :has_many. # ^^^ or any index due to your app-logic. end end in Action View side: <%= render :partial => "create_or_update_script", :locals => { :script => @script } %> you can write lazy style (without :locals): <%= render "create_or_update_script", :script => @script %> So, in ActionView runtime @script has been initialized, prepared and ready to be processed. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.