以简单的形式重写Rails表单助手

时间:2015-12-09 15:39:10

标签: ruby-on-rails ruby ruby-on-rails-4 simple-form

Rails中的以下行是否为简单形式

<%= form_tag(:action => 'attempt_login') do %>

与Rails表单助手中的以下内容相同?

{{1}}

如果没有,你能告诉我它会是什么吗?我需要重做一些表单代码,我想在运行应用程序之前写下正确的语法... 对于传递参数(即:动作)的情况,简单形式文档是相当模糊的。 谢谢!

2 个答案:

答案 0 :(得分:2)

form_for 通常用于特定记录,以便updatecreate

示例:

# view in HAML (not ERB)
= form_for @user do |f|
  = f.text_field :username

# matched with the routes
resources :users

嵌套资源的其他示例:

# routes.rb
resources :users do
  resources :posts
end

# view in HAML
= form_for [@user, @post] do |f|
  = f.text_field :content

由于您将记录作为form_for方法的参数,因此可以“预先填充”记录的某些字段,即@user已经具有{{1}的值},该字段将填充该用户名。

确实你可以为username指定一个的行为,如下所示:

form_for

= form_for @user, url: { action: :custom_action } do |f| 用于“其他表单”,例如form_tag表单或特定控制器要执行的操作。

示例:

login

总结,如果您实际在表单中使用模型的实例并尝试修改/创建它,我会(基于我的观点)使用# view in HAML - form_tag action: :login do = text_field_tag :username = password_field_tag :password 帮助程序。所以在您的情况下,我不会使用form_for帮助程序,而是使用form_for代替(因为您需要登录表单)。

答案 1 :(得分:0)

我最近将form_tag方法迁移到form_for,因为form_for用于使用bootstrap格式化我的表单的gem中。这是一个没有模型的登录表单。以下是我在没有模型的情况下使用form_for的方法:

<%= form_for(:login, :action => 'attempt_login') do %>

我认为这也适用于simple_form:

<%= simple_form_for(:login, :action => 'attempt_login') do %>

我没有使用form_tag,而是因为宝石没有装饰它,我使用了form_for:symbol而不是@model