2011-03-11 3 views
0

저는 레일을 처음 사용합니다. 나는 이것을 다르게하는 방법에 대한 제안에 개방적이다.Groupon 경고 레일

레일에서 하나의 레이아웃으로 2 개의 별도 컨트롤러 액션을 렌더링하고 싶습니다.

두 개의 컨트롤러가 있습니다 : 쿠폰과 MainAlert. 내 응용 프로그램 넓은 레이아웃 페이지의 본문에서 요청 (e.i. localhost/coupons 또는 localhost/MainAlerts)에 따라 Coupons 또는 MainAlerts의 인덱스 작업을로드하는 <yield >이 있습니다.

그러나 쿠폰 또는 MainAlert 또는 요청에 따라 다른 컨트롤러의 색인 작업을로드하고 싶습니다. 사용자가 숨긴 상태에서 가장 위에 @form (사용자가 새 경고를 작성하는 위치)을 항상로드하고 싶습니다. 내가 컨트롤러 액션 (인덱스 쿠폰에서와 _form (새 모두를로드하려면 어떻게

groupon.com

에서 옵션 "이메일 (+)로 거래를 가져 오기"? 만들?) 레이아웃 MainAlerts에서. 값을 MainAlert 양식의 사용자 히트 제출하면 DB에 저장해야합니다.

나는 다르게이 작업을 수행하는 방법에 대한 제안에 열려입니다.

당신을 위해 시간 모두 감사합니다. =)

답변

1

I을 초보자도 많아서 더 멋진 대답을 기대해. .

그러나이를 해결하는 한 가지 방법은 응용 프로그램 컨트롤러에서 before_filter를 사용하여 모든 작업이 처리 될 때마다 항상 새 MainCoupon 인스턴스 변수를 설정하는 것입니다. 그 후 'maincoupon/form'렌더링을 사용하여 레이아웃의 양식을 렌더링 할 수 있습니다. 필요한 인스턴스 변수가 before_filter에 의해 설정되었으므로 양식이 의도 한대로 작동해야합니다. 그냥 당신이 HAML를 사용하여, 더 나은 아직

<% = render 'maincoupons/form' %> 

또는를 가질 수 레이아웃에서

# application_controller.rb 
class ApplicationController < ActionController::Base 
    # other stuff 
    before_filter :new_coupon 


    # other stuff 


    def new_coupon 
    @maincoupon = MainCoupon.new 
    end 
end 

:

그것은 다음과 같이 보일 수 일반적으로

= render 'maincoupons/form' 

당신의 새로운 액션은 사용자가 폼에 정보를 입력하는 뷰와 관련됩니다. 컨트롤러의 새로운 동작은 양식을 작성하기위한 "스캐 폴드"로 사용되는 유형의 새 객체 @maincoupon = MainCoupon.new을 만듭니다.

사용자가 제출할 때 양식 정보는 양식에서 보낸 정보를 가져와 원하는 유형의 새 개체를 만드는 데 사용하는 만들기 작업의 매개 변수로 보내집니다. @maincoupon = MainCoupon.new(params[:maincoupon])

그런 다음 @maincoupon.save 메서드를 사용하여 데이터베이스에 저장합니다. 해당 모델 방법을 콘솔 (레일 콘솔)에서 직접 시도 할 수 있습니다. 예를 들어 는 :

> A = User.new 

는 새 사용자를 만들 것이지만, DB에 저장하지 않습니다. 이 같은 계속할 수 :

> A.name = "Apa" 
> A.save 

이 작성하고 바로 저장됩니다.

> User.create(:name => "Apa") 
+0

답변 해 주셔서 감사합니다. Jesper. 표시하려고 할 때 다음 오류가 발생합니다. 그리고이 오류는 내 시도를 통해 지속되었습니다. ' app/views/simplealerts/_form.html.erb 여기서 line # 1은 다음을 발생시킵니다. NilClass에 대해 정의되지 않은 메소드'model_name ': 클래스 <% = form_for (@simplealert) do | f | %> ' – Yuri

+0

나는 그 길로 HAML 힌트까지 당신을 따라 왔습니다. 나는 아직도 그것을 표시하려고 노력에 붙어있다. – Yuri

+0

죄송합니다. 필터가 잘못되었습니다. 필터는 애프터 필터가 아닌 애프터 필터 여야합니다. – Jesper