2009-08-13 9 views
11

나는 Rails 초보자입니다. 나는 couchrest-rails 앱을 작성 중이므로이 모델에 activerecord를 사용하지 않습니다. 방금 그 뜻을 알게되었습니다.레일즈 form_tag 양식 작성 - 비 액티브 레코드 모델

form_for(@model) 

이 작동하지 않습니다. form_tag를 사용하는 방법을 알아 내려고 노력하고 있습니다. 그러나 대부분의 예제에서는 새로운 & 작업을 포함하지 않습니다.

이것은 잘못된 것입니다 :

Scenario: Create Valid Article       # features/article.feature:16 
    Given I have no articles        # features/step_definitions /article_steps.rb:8 
    And I am on the list of articles      # features/step_definitions/webrat_steps.rb:6 
/home/deploy/www/www.trackingplace.com/app/ccc/app/views/articles/new.html.erb:3: warning: multiple values for a block parameter (0 for 1) 
from /usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.3/lib/action_view/helpers/capture_helper.rb:36 
When I follow "New Article"        # features/step_definitions/webrat_steps.rb:18 
    You have a nil object when you didn't expect it! 
    The error occurred while evaluating nil.error_messages (ActionView::TemplateError) 
    features/article.feature:19:in `When I follow "New Article"' 

하지만 오류를 이해하지 못하는, 또는 어떻게 그것을 해결하기 위해 :

<h1>New article</h1> 

<% form_tag new_article_url(@article), :method => :post do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', articles_path %> 

내 오이 시나리오를 실행할 때, 나는이를 얻을 수 있기 때문에.

답변

16

form_tag 메서드는 양식 작성기를 사용하지 않으므로 양식 블록에서 "f"변수를 사용할 수 없습니다. 대신 f.error_messages의 당신은 등, 당신이 그들은 단지 특정 방법으로 응답해야, 비 액티브 오브젝트와 form_for를 사용할 수 있다고 말했다

<% form_tag new_article_url(@article), :method => :post do %> 
    <%= error_messages_for :article %> 

    <p> 
    <%= label :article, :title %><br /> 
    <%= text_field :article, :title %> 
    </p> 
    <p> 
    <%= submit_tag 'Create' %> 
    </p> 
<% end %> 

, error_messages_for을 사용해야합니다. 이러한 방법이 Article 모델에 구현되어 있는지 확인하십시오.

  • errors 필요한 것, 다른 사람이있을 수 있습니다으로 단지 추측
  • new_record?

  • to_paramid
    • . 이것들이 구현되어 ActiveRecord처럼 동작한다면 form_for을 사용할 수 있어야합니다.

  • +0

    감사합니다. Ryan. 내 모델에 form_for에 대한 지원을 추가하기로 결정한 경우 필요한 전체 메소드 세트를 확인하는 방법에 대한 제안 사항은 무엇입니까? –

    +0

    필자는 레일스 2에서 필요한 메소드의 "완전한"세트를 결정하는 방법을 모른다. 몇 가지 검사를하고 method_missing 오류가 발생하지 않는다면 아마 좋습니다. Rails 3에서는이를 수행하는 문서화 된 방법을 소개하고 모델에서 정의 할 수있는 인터페이스를 제공합니다. – ryanb

    +0

    Ok - 양식 값에 액세스하는 방법을 이해하기가 너무 힘듭니다! 내 컨트롤러에 : def create @article = Article.new (: title => params [: article]) 하지만 작동하지 않습니다. 클래스를 초기화하기 위해 내부적으로 사용하려고하면 다음을 얻습니다. "features"/ steps_definitions/webrat_steps.rb : 14 { "title"=> "Spuds"에 대해 정의되지 않은 메소드'downcase ' } : HashWithIndifferentAccess (NoMethodError) 단서가 있습니까? –