2012-01-26 5 views
0

전체 :레일 3 : URL로 새 레코드 만들기

웹 양식이 아닌 URL 내에 모든 매개 변수를 전달하여 올바른 레코드를 만들려면 올바른 구문은 무엇입니까?

다른 컴퓨터 시스템에서 URL을 연결하고 내 Rails 앱에서 새 레코드를 만들 수 있기를 바랍니다.

그러나 "점수"에서 새 레코드를 만들려고 시도하면 레일스에서 ​​추가하지 않습니다.

http://myapp.heroku.com/scores?message_id=51&subscriber_id=167&amount=3&method=post 

새 점수 레코드에 추가 할 원하는 특성은 message_id, subscriber_id 및 amount입니다.

before_filter :authenticate_user!, :except => [:new, :create] 
:

여기 여기

class Score < ActiveRecord::Base 

    belongs_to :message 
    belongs_to :subscriber 

    end 

점수 컨트롤러, 플러스이 모든 표준 레일 CRUD 스캐 폴딩 (I 궁리를 실행 해요) 한 내 점수 모델 년대 Heroku가이

2012-01-26T18:27:34+00:00 app[web.1]: Started GET "/scores?message_id=51&subscriber_id=167&amount=3&method=submit" for 122.17.234.171 at 2012-01-26 10:27:34 -0800 
    2012-01-26T18:27:34+00:00 app[web.1]: Processing by ScoresController#index as HTML 
    2012-01-26T18:27:34+00:00 app[web.1]: Parameters: {"message_id"=>"51", "subscriber_id"=>"167", "amount"=>"3", "method"=>"post"} 
    2012-01-26T18:27:34+00:00 app[web.1]: Rendered scores/index.html.erb within layouts/application (3.4ms) 
    2012-01-26T18:27:34+00:00 app[web.1]: Completed 200 OK in 16ms (Views: 4.2ms | ActiveRecord: 10.6ms) 
    2012-01-26T18:27:34+00:00 heroku[router]: GET postopmobile.heroku.com/scores dyno=web.1 queue=0 wait=0ms service=55ms status=200 bytes=7605 

로그입니다

마지막으로 위의 URL 끝에 method = submit을 시도해도 작동하지 않습니다.

의견이 있으십니까? 문법적 문제인지 아니면 레일스 문제가 더 깊은 것인지 파악하려고합니다.

감사합니다.

답변

1

기본적으로 Ruby on Rails의 새로운 레코드는 POST을 사용하여 생성됩니다. GET 요청을 사용하여 만들려는 경우 (내가 반대하는 경우) create 작업에 대한 맞춤 경로를 만들어야합니다. 경로에 대한 자세한 내용은 http://guides.rubyonrails.org/routing.html을 참조하십시오.

+0

안녕하세요. 감사. 나는 GET에 전혀 결혼하지 않았습니다. 사실 POST를 사용하고 싶습니다. Rails가 POST를 원한다는 것을 깨닫게하는 방법을 모르겠습니다. 나는 그것을 주문의 길에서 하느냐? 해당 맞춤 URL을 기존 CRUD 만들기 작업으로 지정합니까? – DougN

+0

레일스는 기본적으로 POST를 사용합니다. 보낸 사람 (Ruby 응용 프로그램입니까?)은 요청을 POST로 보내야합니다. CURL (또는 HTTP 라이브러리)을 사용하여 POST를 만들 수 있습니다 (http://superuser.com/questions/149329/how-do-i-make-a-post-request-with-the-curl-commandline 참조). -수단). –

0

GET 대신 POST 요청이 필요합니다. 그것은 url에서 'method'를 전달할 때 작동하지 않습니다. 당신이 정말로 그렇게하려면 , 당신은 새로운 기록을 만들어 사용자 정의 경로, 예컨대 :

resources :scores do 
get :make 
end 

그런 다음 추가 '확인'컨트롤러에 액션을 추가 할 수 있습니다.

하지만 매우 안전하지 않습니다.

관련 문제