是否可以使用get参数渲染视图? 例如,像:
渲染“/ projects / sheets?id = 43”
这是因为我需要渲染一个使用url参数才能正常工作的视图。
我尝试了很多种方法,但它只创建了我只能在控制器中获取的参数,而这些参数在之后不可用。
这是因为我想要一个包含许多其他视图的html代码的视图。
这是我目前的代码:
allProjects.html.erb:
<% Project.where(productchief: user.id).order(:title).each do |project| %>
<%= render "/projects/sheets?id=#{project.id}" #This doesn't work. %>
<% end %>
这是因为我想要一个包含我网站中所有其他视图内容的视图,以允许用户一次打印所有这些内容。
答案 0 :(得分:2)
我认为不可能以你想要的方式去做。您需要将/ projects / sheets更改为partial,然后渲染它并传递局部变量。
所以澄清/projects/sheets.html.erb成为/projects/_sheets.html.erb然后你会调用:
<%= render partial: "/projects/sheets", locals: { :project_id = project.id } %>
然后在部分_sheets.html.erb中,您可以引用project_id
答案 1 :(得分:0)
一般来说,你应该能够在一个视图中访问参数,但除非有一个非常具体的原因,否则我建议改变你的路线。我可能会错过原始问题中的一些信息,但我们假设您的路线为:
get 'projects/sheets', to: "projects#index", as: :projects
get 'projects/sheets/:id', to: "projects#show", as: :project
这会稍微改变你的网址,但仍然可以使用params。例如,使用上面的路线并转到:localhost:3000/projects/sheets/5?something_fun=geeks_are_us
将给出以下参数:
{"something_fun"=>"geeks_are_us", "controller"=>"projects", "action"=>"show", "id"=>"5"}
如果你想通过局部渲染多个项目,你可以传递指定的变量(在你的情况下)&#39;项目&#39;渲染视图但 是部分视图,因为您似乎已经从视图渲染。
类似于:
<% @projects.each do |project| %>
<%= render partial: project, locals: {project: project} %>
<% end %>
这会尝试渲染projects / _project.html.erb并将项目作为变量发送。如果您在视图中需要其他变量,只需将它们传递给本地散列。
希望这是一些帮助。