On Saturday, June 17, 2017 at 10:12:46 AM UTC-4, Walter Lee Davis wrote:
>
>
> > On Jun 16, 2017, at 11:56 PM, fugee ohu <[email protected] <javascript:>> 
> wrote: 
> > 
> > 
> > 
> > On Thursday, June 15, 2017 at 5:03:37 PM UTC-4, Walter Lee Davis wrote: 
> > 
> > > On Jun 15, 2017, at 1:00 AM, fugee ohu <[email protected]> wrote: 
> > > 
> > > 
> > > 
> > > On Wednesday, June 14, 2017 at 8:49:27 PM UTC-4, Walter Lee Davis 
> wrote: 
> > > There's nothing dated about it. Using RJS (Remote JavaScript) 
> rendering gives you the ability to render just the parts of the page you 
> want to replace. With jQuery, you would still have to render the custom 
> HTML that you want to inject into the page, but then you would use load() 
> or replaceWith() to substitute it into the DOM. Now you have two problems. 
> > > 
> > > Walter 
> > > 
> > > > On Jun 14, 2017, at 7:54 PM, fugee ohu <[email protected]> wrote: 
> > > > 
> > > > I wanna render to an element instead of redirecting so went back to 
> my book Agile Web Development with Rails adding ajax it says to make my 
> link remote: true and put a respond_to js in my controller and then use a 
> js.erb file Is that a little dated I've been doing some jquery by including 
> *.js files in assets/javascripts Can I render my views to the element using 
> jquery instead of js.erb I notice rails doesn't generate any js.erb files 
> by default Should I do as the book says or find a way to do it with jquery? 
> thanks ia 
> > > > 
> > > > -- 
> > > > You received this message because you are subscribed to the Google 
> Groups "Ruby on Rails: Talk" group. 
> > > > To unsubscribe from this group and stop receiving emails from it, 
> send an email to [email protected]. 
> > > > To post to this group, send email to [email protected]. 
> > > > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/2a6923a4-e128-4b1f-be14-6eed119e66df%40googlegroups.com.
>  
>
> > > > For more options, visit https://groups.google.com/d/optout. 
> > > 
> > > 
> > > As I iterate through posts I don't know which post someone's going to 
> comment but my js.erb file can only render to a class or id name so when i 
> click comment forms are gonna load for all posts on the page What's the 
> solution please? 
> > 
> > The way I usually do this is I have a partial for a list or table that 
> renders just one of the items, which I gather up in the controller, then I 
> use the content_tag_for() helper (removed from Rails 5, but available in a 
> gem). So my list of items would look like this: 
> > 
> > <ul id="items"> 
> > <%= render @items %> 
> > </ul> 
> > 
> > And to get that little bit to work, you just need to have a partial 
> here: app/views/items/_item.html.erb with the following contents: 
> > 
> > <%= content_tag_for item, :li do %> 
> >   <h1><%= item.title %></h1> 
> >   <%= simple_format item.description %> 
> > <%- end -%> 
> > 
> > In this technique, remember that the local variable (item) inside the 
> partial is named for whatever the partial is named. If you decide to change 
> the name of the partial to item_listing, then inside that partial, your 
> local variable would be item_listing. When you follow the pattern of naming 
> it for the singular of the collection of items you want to render, and you 
> name your collection for the plural, then you can use that lovely terse 
> render @[name of the collection]. But the long form is actually 
> render(partial: 'item', collection: @items), so when you decide to rename 
> the collection or the partial, that's the long-form you need to use in 
> order to clarify what you mean to Rails. 
> > 
> > Walter 
> > 
> > > 
> > > -- 
> > > You received this message because you are subscribed to the Google 
> Groups "Ruby on Rails: Talk" group. 
> > > To unsubscribe from this group and stop receiving emails from it, send 
> an email to [email protected]. 
> > > To post to this group, send email to [email protected]. 
> > > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/84d6c62f-aa8f-429b-b774-29ccacdd3581%40googlegroups.com.
>  
>
> > > For more options, visit https://groups.google.com/d/optout. 
> > 
> > 
> > Your example is with a js file in assets Can we do this with a js.erb in 
> views instead? Same code? What about the file naming convention please 
> Thanks 
>
>
> Actually, it occurred to me after I wrote this that you could do it 
> without any JavaScript at all. In fact, that's what I usually tell people 
> to do first, so I'm surprised I led with the JS example. The thing is, you 
> build the JS version second, as a layer over the HTML version. That way you 
> have a fallback. 
>
> In the _item.html.erb partial, you would change the template to include 
> the link helper directly: 
>
> <%= content_tag_for item, :li do %> 
>   <h1><%= item.title %></h1> 
>   <%= simple_format item.description %> 
>   <%= link_to 'Comment', new_comment_path(item_id: item.id) %> 
> <%- end -%> 
>
> Now that link doesn't have to be "magic'd" into the page with JS at all. 
> It is there and it works. Try it out, see how it works. Then layer JS on 
> top of it (if you want to put the comment form into a modal dialog, for 
> example). 
>
> Also, rather than continuing with your current project, I suggest you 
> build a "stunt app" just to work out this linking issue. Just cd up a few 
> levels in your drive, and `rails new stunt-app` and `rails scaffold Item 
> name description:text` and `rails scaffold Comment item:references 
> comment:text` That's enough to work with here, and by using scaffold, you 
> will start with a known-working framework without any assumptions. If 
> you're using Rails 5, don't forget to add the optional: true bit to your 
> belongs_to declaration on Comment. Otherwise you will find that you cannot 
> save an Item without comments. 
>
> Now to the naming conventions. 
>
> If you use the <%= render @items %> trick, then you have to have a file 
> named views/items/_item.html.erb. Inside that partial, the local variable 
> item will be loaded by the Rails framework if you have passed a collection 
> named @items in your render call. All of that is the optimized "magic" way 
> of doing this. It is a shortcut, and it can be expanded to: 
>
> <%= render partial: 'items/item', collection: @items %> 
>
> If you name the partial something other than the singular of the 
> collection, then you have to use the long form. If your partial is in a 
> different object's view hierarchy than the one that is rendering it, then 
> you also need to put that part in the partial name (how I used items/item 
> above). 
>
> So the same thing could be rendered as: 
>
> <%= render partial: 'foos/foo', collection: @items %> 
>
> and the partial would be changed to name the instance variable inside it 
> 'foo'. 
>
> If you really get into the weeds, then you need to have an iterator in the 
> parent page, and really spell it out for Rails: 
>
> <%- @items.each do |item| -%> 
>   <%= render partial: 'items/item', locals: { item: item } %> 
> <%- end -%> 
>
> The shortcuts are there to make your production work faster, and if you 
> follow the conventions, then they just work in a way that may confuse you 
> at first. I certainly was confused the first time I did this, particularly 
> when I tried to use a non-conventional setup. It took me a long time for 
> the penny to drop that the name of the instance variable inside the partial 
> was NOT based on the name of the object being rendered, but rather the 
> partial's filename. 
>
> Walter 
>
>
What about the js to render the comment form into the div of the right post 
id? 

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/21f1179b-0caa-40f3-971c-f66d119c9e82%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to