pass parameter in render - rails 3

匿名 (未验证) 提交于 2019-12-03 00:48:01

问题:

I've seen a couple questions on this but haven't been able to solve it...

I'm trying to pass a parameter while rendering a partial (similar to domainname.com/memory_books/new?fbookupload=yes)...right now I use this line:

<%= render :partial => '/memory_books/new', :fbookupload => "yes" %> 

and in the partial...I have tried to get the content of fbookupload by using:

<%= fbookupload %> 

which gives an "undefined local variable" error and

<%= params.inspect %> 

which does not show fbookupload as a parameter.

How can I have the partial pass along the parameter :fbookupload?

Thank you.

UPDATE:

Could it have anything to do with the fact that I'm rendering this within a render?

i.e. the page (/fbookphotos/show) that has

<%= render :partial => '/memory_books/new', :fbookupload => "yes" %> 

is being rendered by another page with (posts/show) via:

<%= render :partial => '/fbookphotos/show' %> 

so I'm remember this within a render...

回答1:

try this:

<%= render :partial => '/memory_books/new', :locals => {:fbookupload => "yes"} %> 


回答2:

Taking it out of the comments for posterity. This syntax is correct:

render '/memory_books/new', fbookupload: "yes" 

But if there is a reference to rendering the same partial without specifying the local variables, e.g.

render '/memory_books/new' 

then fbookupload variable becomes unavailable. The same applies to multiple local variables, e.g.

render 'my_partial', var1: 'qq', var2: 'qqq' 

will work if only occurs once. But if there is something like that somewhere else in the code

render 'my_partial', var1: 'qq' 

then the var2 will become unavailable. Go figure ...



回答3:

To do it your way:

In the main view:

<% fbookupload = "yes" %> <%= render :partial => '/memory_books/new', :locals => {:fbookupload => fbookupload} %> 

And in the partial:

<%= fbookupload %> 

2nd option:

Ideally in the controller, otherwise in the view, define an instance variable: @fbookupload = "yes". Then it is available everywhere. The partial will then be : <%= @fbookupload %>



回答4:

Params is just request parameter, so if u want to pass it in params u have to add it to your url ?fbookupload=yes or assign it params[:fbookupload] = "yes", but i don't think that is a good idea.

But if u need to use params[:fbookupload]', u can replace it withparams[:fbookupload] || fbookupload', and pass fbookupload in locals hash for partial.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!