【问题标题】:Is it possible to render a view with "get parameters"?是否可以使用“获取参数”来渲染视图?
【发布时间】:2016-10-18 08:08:19
【问题描述】:

是否可以使用获取参数来渲染视图? 例如,类似:

渲染“/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 %>

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

【问题讨论】:

  • 您是从控制器还是从另一个视图渲染部分?不能将控制器中的属性设置为实例变量吗?
  • 这不是局部的,它是我要渲染的视图,我想从另一个视图渲染它。我有一个名为 allProjects 的视图,我希望在其中拥有显示项目的视图的所有 html(/projects/sheets?id=x 是显示项目的视图的路径),不,我无法设置属性在控制器中作为实例变量。这将与我的观点不一致。
  • 我需要更多的咖啡......可以发誓你的问题提到了使用部分。可能值得您将评论中的额外信息添加到原始问题中,因为它非常相关。
  • 对不起,我添加了一些代码和解释!感谢您的帮助

标签: ruby-on-rails parameters get request


【解决方案1】:

我认为不可能按照您尝试的方式进行。您需要将 /projects/sheets 更改为局部变量并渲染它并传递局部变量。

所以要澄清 /projects/sheets.html.erb 变成 /projects/_sheets.html.erb 然后你会调用:

<%= render partial: "/projects/sheets", locals: { :project_id = project.id } %>

然后可以在部分 _sheets.html.erb 中引用 project_id

【讨论】:

    【解决方案2】:

    通常您应该能够访问视图中的参数,但除非有非常具体的原因您不能访问,否则我建议更改您的路线。我可能会从您的原始问题中遗漏一些信息,但假设您的路线如下:

      get 'projects/sheets', to: "projects#index", as: :projects
      get 'projects/sheets/:id', to: "projects#show", as: :project
    

    这会稍微改变您的网址,但仍会使参数可用。例如,使用上面的路线并转到:localhost:3000/projects/sheets/5?something_fun=geeks_are_us 将给出以下参数:

    {"something_fun"=>"geeks_are_us", "controller"=>"projects", "action"=>"show", "id"=>"5"}
    

    如果您希望通过部分渲染多个项目,您可以传递(在您的情况下)“项目”的分配变量来渲染视图,但它部分你似乎已经从视图中渲染了。

    比如:

    <% @projects.each do |project| %>
        <%= render partial: project, locals: {project: project} %>
    <% end %>
    

    这将尝试渲染项目/_project.html.erb 并将项目作为变量发送。如果您在视图中需要其他变量,只需将它们传递到本地哈希中即可。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多