2010-02-22 5 views
1

나는이 문제의 원인을 찾을 수 있는지 확인하기 위해 출발해야합니다. 나는 정상적인 form_for하고 있어요 :레일 form_for는 id 대신 URL에 객체 참조/주소를 배치합니다

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

을하지만 URL이 생성하는 것은입니다 :

form action="/myobjs/%23%3CMyobj:0x105f03ec0%3E" class="edit_myobj" id="edit_myobj_13" method="post"> 

은 물론 액션 "/ myobjs/13"를 생성해야 할 때 경우 아이디 == (13) . 나는 그 객체가 id를 올바르게 반환하고 있는지 확인했다. 물론 form_for는 id를 사용하여 실제로 id를 적절하게 설정하고있다. (위의 그림과 같이) 그래서 ... form_for가 동작을 생성하기 위해 사용하는 것이 확실하지 않다. 양식의 URL. 누구든지 이전에이 문제에 부딪혀 해결책을 찾았습니까?

미리 감사드립니다 ...

답변

0

모델에 대한 경로를 설정 했습니까?

+0

예, 죄송합니다. 원래 포함시켜야했습니다. 표준 RESTful 라우팅 : map.resources : myobjs – Masonoise

0

<% form_for(Widget.new) do |f| %>과 같은 새 개체에 대한 양식을 만들 때만 발생했습니다. 모델에서 to_param method을 무시하여 현재 진행중인 작업을 확인할 수 있는지 확인하십시오.

def to_param 
    (id = self.id) ? id.to_s : 'NO ID FOUND! Dig for bugs!' 
end 

ActiveRecord :: Base에서 상속하지 않으므로 직접 to_param을 구현해야합니다. ActiveRecord의 to_param에 대한 소스 코드는 다음과 같습니다.

def to_param 
    # We can't use alias_method here, because method 'id' optimizes itself on the fly. 
    (id = self.id) ? id.to_s : nil # Be sure to stringify the id for routes 
end 

그리고 귀하의 상황에서 작동해야합니다.

+0

이 생각에 대해 감사 드리지만 나는 아직 도착하지 않았습니다. 신비하게도 여기에 표시된대로 to_param()을 사용하면 action = "/ myobjs/13"을 사용하여 액션이 올바르게 생성됩니다. 만약 to_param() 메소드를 주석 처리하면, 그것은 다시 잘못 생성됩니다. 이상하게도, 나는 전에 이런 일이 없었어요. 나는 다른 모델과 슈퍼 클래스처럼 보이는 to_param()을 연구해야 할 것입니다. ActiveRecord 모델이 아니므로 그것의 슈퍼는 단순히 객체입니다 ... – Masonoise

+0

ActiveRecord :: Base는 to_param이 정의 된 곳이므로 Object 메소드를 생성하지 않습니다. 오류를 수정하려면 ActiveRecord :: Base를 상속하거나 to_param을 수동으로 추가해야합니다. 단순히 'NO ID FOUND ...'를 NIL로 바꿉니다. –

관련 문제