2011-08-27 7 views
5

Ruby on Rails 초보자로서 "@"및 ":"참조의 의미가 서로 다릅니다. 나는 그 차이의 일부를 설명한 SO에서 this post을 보았다. @Ruby - 차이점과 변수 : @variable

  1. (예, @my_selection)
  2. 인스턴스 (instance) 변수를 나타냅니다 별칭을 나타냅니다 (예 : my_selection)

나는 표준을 가지고 상황에 달렸다 MVC 페이지, 내 webapp의 다른 모든 양식/페이지와 비슷합니다.

NoMethodError in selections#create 
Showing C:/somedir/myapp/app/views/my_selections/index.html.erb where line #16 raised: 
undefined method `my_selection_index_path' for #<#<Class:0x1197e5676>:0x25439c3b> 

:

html.erb 내가이 페이지에 액세스하려고하면

<%= form_for @my_selection do |f| %> 

route.rb이

resources :my_selections 

을 니펫을 니펫을,이 오류가 발생합니다 16 번 줄은 양식 스 니펫 쇼입니다. 위의 n.

동일한 웹 응용 프로그램의 다른 모든 양식/페이지는 정확히 동일한 방식으로 설정되어 정상적으로 작동합니다. 그러나 erb 형식 참조를 : my_selection으로 변경하면이 오류가 사라지고 페이지가 정상적으로 작동합니다.

질문 : my_selections 및 @my_selections 올바른 :

  1. 사이의 차이에 대한 이해인가?
  2. 전환 이유 : my_selection 원래 오류를 해결 하시겠습니까?

답변

13

Is my understanding of the difference between :my_selections and @my_selections correct?

아니 :(

: 기호, 본질적으로 아무것도에 대한하지 별명을 나타냅니다. 그것은 종종 무언가를 대표하는 이름으로 사용됩니다 불변의 문자열 같다.

Rails api가 인스턴스 변수 대신 심볼을 받아들이는 곳에서는 내부적으로 실제로 이렇게합니다 :

실제로 요청한 인스턴스 변수의 값을 반환합니다.

기호가 인스턴스 변수에 모두 해당한다고 생각하는 유일한 이유는 사용중인 API를 구동하는 코드가 그런 식으로 작동하기 때문입니다. 이를위한 프레임 워크가 없으면 상관 관계가 전혀 없습니다.

Why would switching to :my_selection resolve my original error?

for_form(model_instance) 모델이 이미 DB에 종료되면 모델 인스턴스가 저장되지 않은 경우, 또는 업데이트 작업에 경우 생성 작용에 제출 양식을 생성합니다.

아니요 @my_selection에 무엇이 있는지 알 수는 없지만 클래스가 무엇이든간에 경로가 제대로 생성되지 않는 것 같습니다.

양식에 my_selection_index_path에 대한 경로를 생성하는 방법
my_selections_path 

잘 모르겠어요 그것은 정말 모델이 무엇인지에 따라 달라집니다

resources :my_selections 

는 다음과 같이 호출 할 경로를 생성합니다.

심볼을 대신 전달할 때 대응하는 ivar가 없으면 경로 생성을위한 모델 이름으로 사용됩니다. 어떤 기호를 사용하여 직접적으로 my_selections_path을 호출하여 올바른 작업을 수행 할 수 있습니까?

+0

내 모델이 어떤 작업을하는지 확인해야하지만, 분명히 설명해 주시면 감사하겠습니다. – JW8