2009-06-08 4 views
0

내가 리소스로 내 앨범 모델을 매핑하는 내 routes.rb의 라인을 가지고 Datamapper 및 레일로 리디렉션

format.html { redirect_to(@album) } 

원인 리디렉션에 :

albums/%23<Album:0x72d452c> 

대신 :

더 컨텍스트가 필요한 경우
albums/1 

, 컨트롤러에서 내 전체 만드는 방법은 여기에 나열됩니다 :

def create 
    @album = Album.new(params[:album]) 

    respond_to do |format| 
     if @album.save 
     flash[:notice] = 'Album was successfully created.' 
     format.html { redirect_to(@album) } 
     format.xml { render :xml => @album, :status => :created, :location => @album } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @album.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

대회이기 때문에,이 방법은 나의 '새로운에서 양식 제출의 결과로 호출 '이 new.html.erb의 방법

<h1>New album</h1> 

<% form_for(@album) do |f| %> 

    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :description %><br /> 
    <%= f.text_field :description %> 
    </p> 
    <p> 
    <%= f.label :genre %><br /> 
    <%= f.text_field :genre %> 
    </p> 
    <p> 
    <%= f.label :country %><br /> 
    <%= f.text_field :country %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', albums_path %> 

답변

3

합니까 Datamapper는 to_param 방법을 지원 또는 당신은 당신의 앨범 모델을 구현? ORM 사이의 차이점을 숨기려면 Rails 3과 "ActiveORM"레이어가 생길 때까지 코드가 AR과 유사한 API를 준수하는지 확인해야합니다.

to_param 방법이 여전히 작동 그것에게 옛날 방식을 수행하지 않는 경우

format.html { redirect_to(album_path(@album.id)) } 

Clunkier하지만 가장 가능성이 효과적.

+0

와우. 그게 효과가 있었어. 그런데 왜 작동 했습니까? 내보기에서 "% 23 "은 무엇입니까? 그 앨범 개체의 원시 표현의 일종 아닌가요? 따라서 to_param 메소드를 작성하면 오브젝트 표현 대신 객체의 ID가 어떻게 표시되는지 어떻게 알 수 있을까요? "% 23 "?이 코드로 개체를 나타내는 기본 to_param 메서드가 있기 때문입니까? 놀랄 만한. 네가 어떻게 이해했는지 알고 싶다. Rails의 내부 구조를 이해해야합니다. – Baker

+1

내부는 respond_to를해야합니까? to_param을 호출하기 전에 확인하십시오. 왜냐하면 route 메소드도 정수, 배열 및 해시를 허용하기 때문입니다. % 23 는 ActiveRecord와 같은 객체가 해당 메소드를 덮어 쓰지 않는 한 Ruby가 inspect 메소드를 통해 객체를 노출하는 방식 인 # 의 url 인코딩입니다. DM 모델은 AR이나 배열 또는 해시가 아니므로 문자열 보간의 일부로 객체에 대해 호출 된 to_s를 얻습니다. 나는 경로 메쏘드로 보내고있는 어떤 객체를 망칠 기회가 있었기 때문에, 전에이 문제를 보았습니다. – austinfromboston

+0

설명해 주셔서 감사합니다. – Baker