2014-09-04 2 views
0

약 1 년 반 전에 Ruby on Rails 버전 3.2를 사용하여 온라인 과정을 시작했습니다. 나는 수업을 끝내고 응용 프로그램을 만들었고 이제는 수업 PDF와 Rails 4.1.0에서 돌아가겠습니다.레일 : form_tag 맞춤 작업시 오류

나는 오류가 발생하는 부분을 가지고 있는데, 뭔가 잘못되었거나 뭔가가 레일즈 3.2에서 4.1로 변경되었는지 잘 모르겠습니다.

<%= form_tag :action => 'review', :id => @restaurant do %> 
    <strong>Poster: </strong><%= text_field "review", "poster" %><br /><br /> 
    <strong>Date: </strong><%= datetime_select "review", "date" %><br /><br /> 
    <strong>Review:</strong><br /> 
    <%= text_area "review", "review", :rows => 5 %><br /> 
    <%= submit_tag "Review" %> 
<% end %> 

이 지침은 restaurants_controller.rb 파일에 다음 코드를 넣어 작동이 얻을 말 :

def review 
    Restaurant.find(params[:id]).reviews.create(params[:review]) 
    redirect_to :action=>"show", :id => params[:id] 
end 

을하지만 할 때

나는이 때 form_tag 태그를 가지고 그 오류가있는 페이지를 봅니다 :

No route matches {:action=>"review", "controller=>"restaurants", :id=>#<Restaurant id: 1, name: "Marco & Luca", created_at: "...", updated_at: "..." 

내 레이크 경로에 t 모자 쇼는 레스토랑에 매핑됩니다. # show는 레스토랑 경로에 매핑됩니다.

form_tag가 잘못 되었습니까?

클래스의 지침에서 routes.rb에 아무것도 설정하지 않았으므로 컨트롤러 파일의 redirect_to 행 때문일 것이라고 생각합니다. 그거 지금 사용하지 않을거야? 더 이상 유효하지 않습니까?

요청한대로 파일을 라우팅합니다. (수업에서 우리는 경로 파일을 편집 할 필요가 없었습니다).

Rails.application.routes.draw do 

# You can have the root of your site routed with "root" 
root 'restaurants#index' 

resources :restaurants do 
    collection do 
    get 'login' 
    get 'register' 
    post 'newuser' 
    post 'validate' 
    post 'search' 
    end 
end 

고마워요!

+1

'routes' 파일을 보여주세요. –

+0

문서를 보시고 많은 것들이 바뀌 었으며 새로운 프레임 워크를 공부하는 것이 가장 좋다고 생각합니다.이 문서는 여러분이 필요로하고 이해할 수있는 모든 것이 더 나은 것으로 발견 될 것입니다. 방법. [Rails 가이드] (http://guides.rubyonrails.org/4_0_release_notes.html) –

+0

. 양식을 제출할 경로가 없습니다. – sevenseacat

답변

1

당신은 그것을위한 경로 필요합니까. 작동 방법은 다음과 같습니다

  • 사용자가 어떤 페이지의 양식을 채우고
  • 서버가 사용자의 데이터를 처리 review 경로로 데이터를 전송하고 show 경로로 리디렉션을 반환
  • 사용자는 리디렉션 및 요청을 얻는다
  • show 경로는
  • 서버는 show 행동을에 대한

분명히 경로를 실행동작 (또는 위의 호출 : review 경로)이 routes.rb에 없습니다. 그것을 추가하십시오.

UPD : 경로 파일이 매우 이상하게 보입니다. 하나의 컨트롤러에서 한 가지 유형의 리소스를 처리하는 일반적인 방법을 따르지 않는 것처럼 보입니다.

... 
    post 'search' 
    post 'review' 
    #^THIS^
    end 
end 

을하지만 당신은 이미 하나의 컨트롤러에서 자원의 최소 3 종류의 처리 : 여기, 당신은 아마 추가해야 User의, Session들과 Restaurant들.귀하가 그렇게하도록 지시 받았다면 귀하의 잘못이 아닐 수도 있지만, 어느 경우 에나 응용 프로그램을 구성하는 적절한 방법이 아닙니다.

+0

확인. routes.rb 파일에'collection '리뷰를 추가했습니다. 그것은 페이지를 보이게 만들었습니다. 그런 다음 게시하려고 할 때 '경로 일치 없음'이 표시됩니다. 그래서 나는 내 routes.rb에'post 'review'를 추가했다.이 줄에 'ActiveModel : Forbidden Attributes'오류가 발생했다 :'Restaurant.find (params [: id]). reviews.create (params [ : review])' –

+1

@JamesWhite 다음을 참조하십시오 : http://stackoverflow.com/questions/17335329/activemodelforbiddenattributeserror-when-creating-new-user –

0

시도 :

<%= form_tag :action => 'review', :id => @restaurant.id do %> 
+0

그럴 가능성은 희박합니다. 그것은'to_param' 메쏘드에 관한 것이고, 그것은 디폴트 구현에서 객체의'id'를 반환합니다. 재정의 할 수는 있지만 그럴지는 의문입니다. –

+0

그가 AR이나 다른 것을 사용하고 있는지 모르겠지만, 예를 들면 mongoid에서 이런 일이 발생합니다. –

+0

아닙니다. 나는이 오류를 지금받습니다.''% 'form_tag : action =>'review ', : id => @ restaurant.id do %>' –