form_for自定义REST操作和.haml的示例?

时间:2016-01-29 19:08:41

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

我正在为#edit_profile视图重新开发.haml form_for,以容纳已经声明了#edit和#update方法的控制器。我之前使用标准方法使用了表单,但显然Rails在幕后做了很多我现在必须指定的并且我被卡住了。

我是那种通过模仿和破坏来学习的人,所以我需要一个例子。我没有运气就google了,所以我希望有人可以指点我。具体来说:我在哪里放置方法:: patch和update_profile路径?

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

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

提前致谢, 甲

2 个答案:

答案 0 :(得分: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的行。

答案 1 :(得分:1)

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

  

form_for生成一个合适的表单标记,并生成一个表单生成器对象,该对象知道表单所针对的模型。

     

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

form_for的整个是您要将资源 / 对象传递给它。

从模型填充,此对象/资源将包含一个数据数组,例如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|

这应该适合你。