2011-05-09 8 views
1

레일스의 일반적인 어플리케이션 레이아웃에 대해 고심하는 데 어려움을 겪고 있습니다.레일 3 - 어플리케이션 레이아웃 질문

기본적으로 축구 용 웹 앱을 만들고 있습니다. 코치가 로그인하여/코치/색인 페이지로 이동합니다. 이 페이지에서 자바 스크립트 프론트 엔드를 사용하여 연극 등을 그릴 수 있습니다. 내 문제는 재생을 저장하기 위해 JSON을 서버에 보내서 Play 데이터베이스 항목에 기록해야한다는 것입니다.

  1. 내 레이아웃이 논리적으로 정확합니까? 마찬가지로 코치가 로그인하여 해당 페이지로 이동 한 다음 해당 장소에서 연극을 연 다음 저장하거나 새로운 작품을 만들거나로드하는 등의 작업을 수행해야합니까? 아니면 내가 Play 컨트롤러에서 관리하는 페이지에서이 작업을 수행해야합니까?

  2. 재생 엔진에서 생성 한 JSON을 데이터베이스에 저장하려고합니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 내가 볼 수있는 모든 레일즈 AJAX 튜토리얼은 리모트 => true 속성을 설정 한 간단한 폼을 기반으로합니다. 명시 적 폼없이 Rails DB에 AJAX POST/GET을 수행하고 입력을 처리하려면 어떻게해야합니까?

  3. 이것은 Rails의 노하우가 부족한 것입니다. (제가가는대로 배우려고 노력하고 있습니다.)하지만 당신의 경험에 비추어 볼 때, 올바른 플레이를 보장하는 가장 좋은 방법은 무엇입니까? 그들을 만든 코치에게 보여 줬어? 나는 컨트롤러가 다른 컨트롤러에 의해 제어되는 것을 액세스하는 방법을 이해하는데 다소 어려움을 겪고있다. 이런 종류의 일에 대해 몇 가지 규칙이 있어야합니다.

더 나는 그것에 대해 생각, 더는 로그인하는 것은 내가하고 싶은 일을하기 위해 거기에/디렉토리를 재생하는 방법을해야하고, 내가 만들고 수정해야하며 나에게 보인다 할 것. 미리 감사드립니다.

+0

내가 물어보고 싶은 또 다른 사항 : 데이터베이스 제출에 숨겨진 항목을 저장하려면 어떻게해야합니까? 누군가가 새로운 Play를 설정하면 그 사람과 명시 적으로 말하기. 어떻게해야합니까? – Red

답변

0
  1. 레이아웃이 논리적입니까? /coaches은 로그인하는 코치의 대상으로 사용됩니다. 응용 프로그램 사용자가 코치 만 사용하는 경우 루트가 적합합니다. 코치가 로그인하면 어떤 형태로든 coaches#show으로 갈 것입니다. 그렇다고해서 URL이 /profile 일 뿐이니까 잘못된 것이 아닙니다. 모든 것이 URL 측면의 완전한 REST를 준수해야합니다. 현실 세계에서, 결코 new 액션은 독자적인 작은 기발한 페이지에 머 무르지 않습니다. /coaches 페이지에 새 Play 양식을 중첩하는 것이 의미가있는 경우 URL에 반영 할 필요가 없습니다.

컨트롤러는 리소스와의 상호 작용을 제어합니다. /coaches 페이지에서, 당신은 여전히 ​​plays#destroy에 삭제 플레이 요청을 전송됩니다 및 render 'coaches/index' when it fails.

  1. 정말 레일에 AJAX 처리 한 적이 있습니다 plays#create을 통해 새로운 연극을 확인하는.

  2. 코치가 자신의 연극 만 볼 수있게하는 가장 좋은 방법은 Coach has_many :plays 연계를 통해 코치를 대상으로하는 것입니다. Devails와 같은 Rails 인증 솔루션의 관례는 현재 로그인 한 사용자의 User 모델 인스턴스를 반환하는 current_user 메소드를 제공하는 것입니다.

    # Coaches controller 
    def index 
        @plays = current_user.plays 
    end 
    

    그런 다음보기가있을 수 :

귀하의 coaches#index 조치는 같이 할 수

# views/coaches/index.erb 
<ul> 
<% for play in @plays %> 
    <li><%= play.name %></li> 
<% end %> 
</ul> 

당신은하지 않을 것입니다 무엇 : @plays = Play.where(:user_id => @user.id).

또한 다른 작업을 단순화하고 보호합니다. 고려 :

@play = current_user.plays.new 

@play = current_user.plays.build(:name => "My First Play") 
redirect_to @play, :notice => "Success!" if @play.save 

current_user.plays.find(params[:id]).destroy 

은 귀하의 질문에 주석으로 추가 대답하기 : 당신이 그들에 익숙하지 않은 경우

# Coaches controller 
def new 
    @play = current_user.plays.new 
end 

def create 
    @play = current_user.plays.build(params[:play]) # @play now already contains the association to the coach that created it. 
    if @play.save! 
    redirect_to # somewhere 
    else 
    render 'coaches/index' 
    end 
end 
  • 내가 매우 Railscasts을 추천합니다. 조만간 구현하지 않을 주제에 관한 에피소드를 보더라도 좋은 노출을 얻을 수 있습니다.
  • 예를 들어 여기에 Railscast on Devise이 있습니다. 또한 Devise는 Github에 대한 적절한 문서를 가지고 있습니다.
  • 나는 최근에 Rals Best Practices에 CodeSchool 's couse를 샀다. 그 중 일부는 즉각적인 이해를 넘어서는 것일 수도 있지만, 항상 재검토 할 수있는 리소스입니다. 더 나은 방법을 찾기 위해 항상 함께 제공되는 슬라이드를 참조하십시오.
+0

감사합니다. @Dobry, 멋진 답변이었습니다. 생각할 좋은 물건이 많고 링크에 감사드립니다. 나는 Rails for Zombie 's에 익숙하지만 더 많은 고급 튜토리얼을 가지고 있다는 것을 깨닫지 못했다. – Red