首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Rails视图中动态设置具有不同路由的搜索表单?

如何在Rails视图中动态设置具有不同路由的搜索表单?
EN

Stack Overflow用户
提问于 2018-05-24 00:48:15
回答 2查看 31关注 0票数 0

我目前有一个用HAML编写的非常简单的搜索表单:

代码语言:javascript
复制
%form.search{ method: 'get', action: '/users/search' }
...

在呈现此视图时,根据控制器在实例变量中设置的模型来呈现不同的搜索路线时,正确的rails约定是什么?

我找到了这个blog post,但是这个代码<%= form_tag(recipes_path, :method => "get"对我来说还不够通用。我希望根据控制器在呈现此视图时与之协作的模型来设置此值recipes_path。搜索表单可以跨多个具有自己的搜索操作的控制器使用。我的应用程序可以在不同的页面上搜索不同的型号。

我当然可以想出一种方法来做到这一点,但我想知道“正确”的方法,或者我认为是“rails”方法,即根据表单要搜索的数据,动态地将表单操作设置为不同的控制器操作。

EN

回答 2

Stack Overflow用户

发布于 2018-05-24 01:50:20

我不知道这样做的“正确”或“rails”方式是什么。(但是,它肯定不是用%form手工制作的表单。)

在我的应用程序中,我倾向于只有一个表单部分,如下所示:

app/views/widgets/form

代码语言:javascript
复制
- @presenter = local_assigns[:presenter] if local_assigns[:presenter]

= form_tag @presenter.form_path, remote: true, id: @presenter.form_id, class: @presenter.form_classes, data: @presenter.form_data, method: @presenter.form_method do 
    = @presenter.form_inner

在我的presenter_base.rb文件中,我有如下内容:

代码语言:javascript
复制
class PresenterBase

  def render_partial
    render(partial: "#{file_name}", locals: {presenter: self})
  end

  def render_form
    render_partial 'widgets/form'
  end

end

因此,要在FooPresenter中呈现表单,我可能会这样做:

代码语言:javascript
复制
class FooPresenter < PresenterBase

  def present
    render_form
  end

  def form_path
    some_form_path(and: :maybe, some: :query_params)
  end

  def form_id
    'my-cool-form'
  end

  def form_classes
    'some cool classes'
  end

  def form_data
    {some: :form, data: :here}
  end

  def form_method
    :post
  end

  def form_inner
    ...
  end

end

当然,还有更多的事情要做(比如,我如何将一个普通的老ruby对象转换成render)。但是,这应该会给你一种这样做的感觉。

票数 1
EN

Stack Overflow用户

发布于 2018-05-24 02:59:32

一种简单的方法,如果没有复杂的问题,并且您遵循约定,可以是这样的

代码语言:javascript
复制
%form.search{ method: 'get', action: "/#{controller_name}/search" }

所以如果你在users_controller中,它将打印"users",如果你在static_pages_controller中,它将显示"static_pages“,依此类推。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50493597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档