如何使用HAML基于对象创建Rails表单?

时间:2011-07-18 16:25:05

标签: ruby-on-rails

如果我有一个名为Client和控制器的模型,看起来像这样

class ClientController < ApplicationController
def new
  @client = Client.new
  @client.name = "New Guy"
end
end

我正在使用HAML,我的视图需要看起来像是基于此呈现表单。

我有这个

%p= @client.name
-form_for :client, @client do |c|
 c.label :c.name
 c.text_field :c.name

但我的html最终看起来像这样

<p>New Guy</p>
<form accept-charset="UTF-8" action="/client/new" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="orGtE1V05QIaye5kSsAi5SBdEAV0AJX9uZYUzHw5P64=" /></div>
  c.label :c.name
  c.text_field :c.name
</form>

更新 谢谢你的回答。当我将视图更改为

%p= @client.name
-form_for :client, @client do |c|
  = c.label :c.name
  = c.text_field :c.name 

我收到以下错误

undefined method `name' for :c:Symbol

Extracted source (around line #3):

1: %p= @client.name
2: -form_for :client, @client do |c|
3:   = c.label :c.name
4:   = c.text_field :c.name

如果我注释掉第2,3和4行,这个名字打印得很好。我错过了什么?

更新2:

如果我将视图更改为

%p= @client.name
-form_for :client, @client do |c|
 c.label :name
 c.text_field :name

没有更多的错误。感谢。

3 个答案:

答案 0 :(得分:0)

你需要在ruby函数调用之前使用=,以便对它们进行评估。

%p= @client.name
-form_for :client, @client do |c|
  = c.label :c.name
  = c.text_field :c.name

答案 1 :(得分:0)

我认为就是这样:

%p= @client.name
-form_for :client, @client do |c|
  =c.label :c.name
  =c.text_field :c.name

当然没有考虑任何视觉格式......

答案 2 :(得分:0)

这就是你想要的:

%p= @client.name

- form_for :client, @client do |c|
 = c.label :c.name
 = c.text_field :c.name