Ok 일부 데이터를 삽입하기 위해 서버에 JQuery. post 요청을하고 있습니다. Rails 작성 메소드에 어떤 메소드가 있는지에 따라 때로는 작동합니다.POST 메서드/Create 메서드는 일부 메서드에서는 작동하지만 다른 메서드에서는 작동하지 않습니다. Feedzirra
여기에 구체적인 내용이 나와 있습니다. 프론트 엔드에 Backbone.js가있는 Rails 앱이 있습니다. 프론트 엔드 코드에서이. post 요청을한다.
$.post('/publications');
충분히 간단 해 보인다. 나는 라우터에
resources :publications
뿐만 아니라 출판 모델을 가지고 있습니다.
def create
feed = Feedzirra::Feed.fetch_and_parse(publication_params[:url])
params = {:name => feed.title}
@publication = Publication.new(params)
respond_to do |format|
if @publication.save
format.html { redirect_to @publication, notice: 'Publication was successfully created.' }
format.json { render action: 'show', status: :created, location: @publication }
else
format.html { render action: 'new' }
format.json { render json: @publication.errors, status: :unprocessable_entity }
end
end
end
Feedzirra는 RSS 피드를 구문 분석하는 보석이다 : 이제 내 간행물 컨트롤러에서 나는 다음에 방법을 만들 증강. 나는이 같은 POST 요청을하면 내 서버 로그에서 500 (내부 서버 오류)이 메시지가
NoMethodError (undefined method `title' for {}:Hash):
app/controllers/publications_controller.rb:28:in `create'
Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (40.3ms)
Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms)
Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (54.7ms)
무엇 나를 혼란 것은 그 나는 항목 '와 같은'제목 '과는 다른 방법을 선택하는 경우 '또는'nil? ' POST 요청은 잘 작동합니다. 레일즈 콘솔에 가서 테스트 Feedzirra 객체를 만들고 다양한 메서드를 사용할 때 'title'이 그 중 하나라는 것을 알았 기 때문에 'title'은 실제로 메서드라는 것을 알고 있습니다.
왜 내 POST 요청은 이러한 방법 중 일부에서 작동하지만 다른 방법은 사용할 수 없습니까?!,!,!!?!
* UPDATE * ***
krabbi을 복용하고 알렉산더 Zolotko의 조언 내가 FeedZirra가 반환하는 것과 함께 연주하기 시작 후. 줄처럼 보입니다.
feed = Feedzirra::Feed.fetch_and_parse(publication_params[:url])
이 빈 해시를 반환합니다.
레일즈 콘솔에서 같은 줄을 실행하고 URL을 하드 코드하면 적절한 해시가 반환되고 제목과 다른 값을 가져올 수 있습니다. 문제가
publication_params[:url]
아직도 제안 :
* UPDATE 두번째 부분 *
이 오픈 작업에있다처럼 그래서 내가 문제가 더 URL가 없다고라고 생각 보인다 열을 선택합니다. 그래서 나는 적절한 이주를했다. 맨 위로 하단에있는 컨트롤러에
create_table "publications", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.string "url"
end
:
private
# Use callbacks to share common setup or constraints between actions.
def set_publication
@publication = Publication.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def publication_params
params.permit(:name, :url)
end
publication_params [: 홈페이지] 여전히 전무를 반환 그래서 여기 스키마입니다.
params.require(:publication).permit(:url, :name)
당신의 publication_params[:url]
이 문자열 이외가 포함되어있는 Feedzirra::Feed.fetch_and_parse
내가 볼 수있는 유일한 옵션을 검토 한 후 나에게 400 잘못된 요청 오류
이로 인해 더 이상 500 오류가 발생하지 않았습니다. 새로운 발행물 항목을 만들었지 만 이름 열에는 아무 것도 포함하지 않았습니다. – user2623706
Rails 4의 강력한 매개 변수를 사용한다고 가정하면 params 해시에서 URL을 필요로하고 허용하는지 확인하십시오. – krabbi
이것은 내가 가지고있는 것입니다 : 'params.permit (: url, : name)' – user2623706