【问题标题】:Example of form_for custom REST action and .haml?form_for 自定义 REST 操作和 .haml 的示例?
【发布时间】:2016-01-29 19:08:41
【问题描述】:

我正在为 #edit_profile 视图重新开发 .haml form_for,以适应已声明 #edit 和 #update 方法的控制器。我以前使用标准方法使表单工作,但显然 Rails 在幕后做了很多我现在必须指定的事情,我被困住了。

我是那种通过模仿和破坏事物来学习的人,所以我需要一个例子。我已经用谷歌搜索了没有任何运气,所以我希望这里有人可以指出我。具体来说:我在哪里放置 method::patch 和 update_profile 路径?

我只需要火腿。我已经确定控制器可以使用新方法(#edit_profile 和#update_profile),所以我所要做的就是将表单连接到控制器。

如果有人需要,这里是存储库: https://github.com/sidhene/MetPlus_PETS/blob/Update_CompanyPerson-%23146/app/views/company_people/edit_profile.html.haml

提前致谢, 一个

【问题讨论】:

    标签: ruby-on-rails haml form-for


    【解决方案1】:

    url 参数必须是 update_profile 操作而不是 update 操作。将update_company_person_path(@company_person) 更改为update_profile_company_person_path(@company_person)

    编辑:您的config/routes 看起来正确,但运行rake routes 只是不确定。您应该会看到其中包含 update_profile_company_personPATCH 的行。

    【讨论】:

    • 谢谢,我想我们(我是团队的一员)已经确认了 rake 路线。我使用 Rspec 测试来验证控制器。假设测试很好,如果路线错误,至少有一个测试会失败吗?
    • 集成(例如水豚)测试会发现这一点。控制器测试不会,因为 1)默认情况下它们不会呈现视图,2)即使您调用 render_views 方法,它也会通过,因为代码在语法上是正确的,以及 3)当您测试控制器方法时,您'重新绕过路由器,因此用于测试update_profile 操作的代码命名该操作,而不是依赖于视图中的代码。
    【解决方案2】:

    form_for 接受一个值并从中填充其其他 HTML 属性(action / method 等):

    form_for 生成一个适当的表单标签并生成一个表单构建器对象,该对象知道表单的模型。

    如您所见,HTML 在多个方面反映了有关资源的知识,例如表单应提交到的路径或输入字段的名称。

    form_for 的整个是你要传递一个 resource / object 给它。

    从模型中填充,此对象/资源将包含一个数据数组,例如 Class 名称等,Rails 然后使用这些数据填充表单。

    根据文档:

    ...要创建一个新人,您通常会在 PeopleController#new 操作中设置 Person 的新实例 @person,然后在视图模板中将该对象传递给 form_for

    <%= form_for @person do |f| %>
    

    为此生成的 HTML 将是(模数格式):

    <form action="/people" class="new_person" id="new_person" method="post">
    

    因此,如果您想为您的表单推断出不同的 path / url,您需要明确定义它:

    = form_for @profile, url: profile_update_path(@profile) do |f|
    

    --

    在您的情况下,您使用的是nested resource,这意味着您必须将路径的两个部分作为数组传递:

     = form_for [:company_person, @company_person] do |f|
    

    这对你应该没问题。

    【讨论】:

    • 谢谢!这看起来正是我需要的。在我有时间“解包”它之后不久......
    • 看起来您为嵌套资源提供的第二个示例不包括自定义调用。如果是这样,我该如何表达?
    • 自定义调用是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多