Ruby on Rails Thursday, June 15, 2017



On Thursday, June 15, 2017 at 6:33:02 PM UTC-4, Walter Lee Davis wrote:

> On Jun 15, 2017, at 6:12 PM, fugee ohu <fuge...@gmail.com> wrote:
>
>
>
> On Thursday, June 15, 2017 at 5:11:29 PM UTC-4, Walter Lee Davis wrote:
> If you are doing this in a RJS template, then you will have the instance variables available to you, whatever you set at the controller that is rendering this. Just render the form using the @comment you created in the controller.
>
> I just posted an answer to a different question you raised, where I show you how to get the unique IDs on the DOM elements holding members of a collection. You can use that technique with RJS or with a single JS file that does not have any ERB replacement in it.
>
> Walter
>
> > On Jun 15, 2017, at 4:23 PM, fugee ohu <fuge...@gmail.com> wrote:
> >
> > This is my jquery
> > $('.new_comment_button').after("<%= j render('form') %>");
> > I need
> > $('.new_comment_button') to be contructed from the values of variables because i can't give every post the same id I don't think using class instead of id in my view would make a  difference How can i do this?
> >
> > --
> > 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 rubyonrails-ta...@googlegroups.com.
> > To post to this group, send email to rubyonra...@googlegroups.com.
> > To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/941f357b-b82a-4e27-82b4-1effb5303d12%40googlegroups.com.
> > For more options, visit https://groups.google.com/d/optout.
>
>
> Can I have the link And once I get the DOM id's how do i plug them into my js.erb file to change $('.new_comment_button') to let's say  $('.new_comment_button2')
>

There are a number of different ways to solve this problem. The way I imagine your app, you want to be able to comment on an item, but without having a bunch of forms rendered in the page (one for each item in a collection). Right so far? So the static (non-RJS) way to do this with jQuery is to use the DOM and JS to send the correctly unique variable to your comments controller to let it know which item you are commenting on.

# items_controller.rb

  def index
    @items = Item.all.page(params[:page])
  end

# views/items/index.html.erb
<ul id="items">
  <%= render @items %>
</ul>

# views/items/_item.html.erb
<%= content_tag_for item, :li do %>
  <%= content_tag :hi, item.headline %>
  <%= simple_format item.description %>
<%- end -%>

# assets/javascripts/item_comments.js
$(document).on('turbolinks:load', function(){
  $('#items li').each(function(){
    var elm = $(this);
    elm.append('<a href="/comments/new?item_id=' + elm.attr('id').split('_')[1] + '">Comment</a>');
  });
});

That gets you a link to a CommentsController, which in turn will need to decode the (bare) attribute item_id out of its querystring, and figure out which item you are commenting on.

The #content_tag_for method, which you no doubt read the documentation for, will always create a unique id on the content tag it creates, using the instance variable you pass to it to figure out what that should be. For my contrived example, that will be 'item_123' or 'item_456' or similar. Model name, singular, lower-case, followed by an underscore, followed by the ID of the instance.

It's trivial in JavaScript (using jQuery or not) to read that attribute, split it by the underscore character, and take the number off the end. So your JavaScript stays static, uses the DOM as a data source, and you don't have to write a different link for each of the items in your list.

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 rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c5c586c2-70f7-452c-86af-b2e247482464%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.


Thanks Is this what everyone else is doing ? 

--
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 rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/eddc55a6-4f53-4194-9169-3c348d2a425a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment