是否可以使用“获取参数”渲染视图?

时间:2016-10-18 08:08:19

标签: ruby-on-rails parameters get request

是否可以使用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 %>

这是因为我想要一个包含我网站中所有其他视图内容的视图,以允许用户一次打印所有这些内容。

2 个答案:

答案 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并将项目作为变量发送。如果您在视图中需要其他变量,只需将它们传递给本地散列。

希望这是一些帮助。

相关问题