Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RAILS3: Pass arbitrary parameters via button_to?

I'm trying to do something very simple in my first Rails app (Rails 3) and I'm not sure what I'm doing wrong, or if there's a better approach. Can't find anything on the web or here that has solved it for me despite much searching.

In the app I have WorkRequests and Articles. When viewing an Article, I want a button to create a WorkRequest and, when the new WorkRequest form appears, have the article filled in. Essentially, I'm trying to pass the Article.id to the new WorkRequest.

Works in link_to just by adding the parameter, but I want it to be a button. While it shows up in the Article form's HTML as a query parameter, it never gets to the WorkRequest.new method. This article from 2010 explains the problem in some detail, but the solution does not work for me (see my comment at the end of the page.)

This seems like it should be a fairly easy and common thing to do (once I figure it out, there are several other places in my own app where I want to do the same thing) but I've been banging my head against this particular wall for a few days now. I am new to Rails--this is my first app--so I hope someone more experienced can help!

Thanks in advance.

like image 389
Dan Barron Avatar asked Mar 19 '11 16:03

Dan Barron


1 Answers

Just circling back to finish this up. Ultimately I solved this by using link_to but using jQuery to make it look like a button. @kishie, if you're saying you made this work with button_to I'd like to see the code, but as I like jQuery it's solved as far as I'm concerned (for this app, anyway.)

Here's the code in Article#show view. (The class is what makes it look like a button via jQuery.)

<%= link_to "New Request", new_work_request_path(:article_id => @article.id), :class => "ui-button" %>

Here's the code in Work_Request controller's new method:

if !params[:article_id].blank?
  @work_request.article = Article.find(params[:article_id])
end

Then the Work_Request#new view renders it properly.

like image 56
Dan Barron Avatar answered Oct 22 '22 11:10

Dan Barron