On Tue, Jun 5, 2012 at 4:28 AM, Michael Boutros
<michael.bout...@gmail.com>wrote:
>
> As for actually implementing this, my train of thought is to use
> ActiveRecord::Reflections to keep checking what a model belongs_to and then
> calling that association.
>

There is no sane way to guess which association to use. "Issue" from your
example may as well belong to category, author or other issue (and many
other things). Also, such implementation would be rather slow, complicated
and would depend on ActiveRecord's API, while we try to only depend on
ActiveModel.

I believe that the implementation should look like the example provided by
Prem. In such scenario developer would be responsible to set the prefix for
given record, which is good from various reasons:

* we won't break any existing APIs
* it should be pretty fast considering that it will just add respond_to?
call for people not using this feature

I have mixed feelings about that, as I don't use nested resources heavily,
but I can see that it could make it easier to manage nestings in some of
the apps.


>
> - Michael Boutros
>
>
> On Monday, 4 June 2012 18:41:41 UTC-4, John Mileham wrote:
>>
>> One reason that the code to generate all those URLs seems not to be DRY
>> might be that any URL that can be programmatically deduced from the model
>> at the end of the chain is itself non-DRY.  i.e.
>> /users/1/projects/2/issues/3 adds no more information than /issues/3 would
>> in that case.  Obviously in some cases you want nested routes to provide a
>> more human-readable URL, but there are real security pitfalls to using
>> nested routes if you don't unpack the URLs correctly and validate the
>> associations in your receiving controller.
>>
>> I wonder whether a bit of vinegar might actually be a good thing in this
>> case?  If you really want deeply nested routes, you have to do a little
>> more leg work, because the simpler and safer way is to avoid nesting.
>>  Thoughts?
>>
>> -john
>>
>> On Mon, Jun 4, 2012 at 4:39 PM, Prem Sichanugrist <sikand...@gmail.com>wrote:
>>
>>> I think it make a lot of sense. I'd +1 on this.
>>>
>>> I think since we already know what portion of the path is called, we can
>>> do something simple like:
>>>
>>>    if record.respond_to? :project
>>>      path_portion[1] = record.prefix
>>>    end
>>>
>>> (that's psudocode btw, the actual impl will be more complex. Just to get
>>> you the idea.)
>>>
>>> - Prem
>>>
>>> On Jun 4, 2012, at 4:35 PM, Duncan Beevers wrote:
>>>
>>> > On Mon, Jun 4, 2012 at 3:32 PM, Ryan Bigg <radarliste...@gmail.com>
>>> wrote:
>>> >> Oh, reading this again it seems I was wrong.
>>> >>
>>> >> How would it guess the associations?
>>> >
>>> > Indeed
>>> >
>>> > The way that many apps deal with this pain is using shortcut urls like
>>> > /issues/5 that simply get the indicated record, look up the parent
>>> > records, and then figure out permissions based on the "implicit"
>>> > hierarchy.
>>> >
>>> >>
>>> >> --
>>> >> Ryan Bigg
>>> >>
>>> >> On Tuesday, 5 June 2012 at 3:10, Michael Boutros wrote:
>>> >>
>>> >> Hello all,
>>> >>
>>> >> I'm working on a Rails app and I have resources nested three deep -
>>> let's
>>> >> call them user, project, and issues. The route helpers now look like
>>> >> user_project_issue_path(@user, @project, @issue). Would it make sense
>>> for
>>> >> Rails to guess the @user and @project relations from @issue? It just
>>> feels
>>> >> like a lot of redundant and non-DRY code. I'm willing to write the
>>> code
>>> >> myself (or die trying), but I just wanted to make sure this isn't by
>>> design.
>>> >>
>>> >> - Michael Boutros
>>> >>
>>> >> --
>>> >> You received this message because you are subscribed to the Google
>>> Groups
>>> >> "Ruby on Rails: Core" group.
>>> >> To view this discussion on the web visit
>>> >> https://groups.google.com/d/**msg/rubyonrails-core/-/**2jig2rKv1xMJ<https://groups.google.com/d/msg/rubyonrails-core/-/2jig2rKv1xMJ>
>>> .
>>> >> To post to this group, send email to rubyonrails-core@googlegroups.**
>>> com <rubyonrails-core@googlegroups.com>.
>>> >> To unsubscribe from this group, send email to
>>> >> rubyonrails-core+unsubscribe@**googlegroups.com<rubyonrails-core%2bunsubscr...@googlegroups.com>
>>> .
>>> >> For more options, visit this group at
>>> >> http://groups.google.com/**group/rubyonrails-core?hl=en<http://groups.google.com/group/rubyonrails-core?hl=en>
>>> .
>>> >>
>>> >>
>>> >> --
>>> >> You received this message because you are subscribed to the Google
>>> Groups
>>> >> "Ruby on Rails: Core" group.
>>> >> To post to this group, send email to rubyonrails-core@googlegroups.**
>>> com <rubyonrails-core@googlegroups.com>.
>>> >> To unsubscribe from this group, send email to
>>> >> rubyonrails-core+unsubscribe@**googlegroups.com<rubyonrails-core%2bunsubscr...@googlegroups.com>
>>> .
>>> >> For more options, visit this group at
>>> >> http://groups.google.com/**group/rubyonrails-core?hl=en<http://groups.google.com/group/rubyonrails-core?hl=en>
>>> .
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google
>>> Groups "Ruby on Rails: Core" group.
>>> > To post to this group, send email to rubyonrails-core@googlegroups.**
>>> com <rubyonrails-core@googlegroups.com>.
>>> > To unsubscribe from this group, send email to
>>> rubyonrails-core+unsubscribe@**googlegroups.com<rubyonrails-core%2bunsubscr...@googlegroups.com>
>>> .
>>> > For more options, visit this group at http://groups.google.com/**
>>> group/rubyonrails-core?hl=en<http://groups.google.com/group/rubyonrails-core?hl=en>
>>> .
>>> >
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ruby on Rails: Core" group.
>>> To post to this group, send email to 
>>> rubyonrails-core@googlegroups.**com<rubyonrails-core@googlegroups.com>
>>> .
>>> To unsubscribe from this group, send email to
>>> rubyonrails-core+unsubscribe@**googlegroups.com<rubyonrails-core%2bunsubscr...@googlegroups.com>
>>> .
>>> For more options, visit this group at http://groups.google.com/**
>>> group/rubyonrails-core?hl=en<http://groups.google.com/group/rubyonrails-core?hl=en>
>>> .
>>>
>>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-core/-/Zdw0HifJd64J.
>
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-core+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-core?hl=en.
>



-- 
Piotr Sarnacki
http://piotrsarnacki.com

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-core+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to