2012-02-14 5 views
1

를 통해 값 및 업데이트 DB를 증가하는 방법 :레일 3 - 나는보기가 LINK_TO

<h2>The current billing period is <%= @current_period %></h2> 
<h2>The current period approved is <%= @approval_period %></h2> 
<h2><%= link_to "Approve Period", :method => :approve, :id => @approval_period %></h2> 

및 컨트롤러 :

def approval_period 
    @current_period = PeriodCounter.first.period.pe_number 
    @approval_period = ApprovalPeriod.first.period.pe_number 
end 

def approve 
    @approval_period = ApprovalPeriod.first.period_id 
    @approval_period.update_attribute("period_id", period_id + 1) 
    @approval_period.save 
    redirect_to :back 
    flash[:notice] = "Approval Period Updated." 
end 

내가 @approval_period을 증가 할 수있는 데이터베이스를 업데이트하기 위해 노력하고있어를 링크를 클릭하면 1 씩 증가합니다. 나는 오랫동안 Rails를 사용 해왔다. 그래서 나는 핵심 요소가 빠져 있다는 것을 알고있다. 어떤 도움이 필요합니까? 미리 감사드립니다 ...

+0

오류가 무엇입니까? –

답변

8

:method 컨트롤러의 메소드가 아니라 Get 또는 Post와 같은 HTTP 동사입니다. 대신 당신은

<%= link_to "Approve Period", approve_path(:period => @approval_period) %> 

같은 일을하고

match "/approve" => "controller#approve", :as => :approve 

으로 routes.rb에

읽기 (수행 할 수 있습니다 learn how to add more restful routes 경로를 추가하는 위의 하나의 방법을) approve_path를 추가해야 라우팅에 대해 자세히 알아 보려면 Rails Routing from the Outside In을 참조하십시오.

업데이트 :

@approval_period.update_attribute("period_id", period_id + 1) 

라인 위의 오류를 던지고 것입니다. 어디에도 period_id을 정의하지 않았습니다. 오는 매개 변수는 params[:period]입니다.

그렇다면, 당신은이 작업을 수행 할 수 있습니다

접근 한

@approval_period = ApprovalPeriod.find(params[:period]) 
@approval_period.update_attribute("period_id", @approval.period_id + 1) 

접근법 2

초록이 밖으로 방법 :

class ApprovalPeriod < AR::Base 
    def increment! 
    # Here 'period_id' is valid since it is an attribute and a method 
    # with that name will be available 
    update_attribute(:period_id, period_id + 1) 
    end 
end 

컨트롤러의 d :

def approve 
    @approval_period = ApprovalPeriod.find(params[:period]) 
    @approval_period.increment! 
    ... 
    # Other code here 
end 

당신이 어떤 스위트 룸으로도 이동하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 더 가깝다고 생각하지만 링크를 클릭하면 다음과 같은 오류가 발생합니다 : 정의되지 않은 지역 변수 또는 # PeriodBillingsController : 0xb6ca676c> –

+0

에 대한 'period_id'메소드에 대한 대답 @ KatieM이 답변에 대한 내 업데이트를 참조하십시오. –

+0

아, ApprovalPeriods에는 Periods 테이블의 외래 키인 period_id 열이 있습니다. 충분하지 않은 정의입니까? 나는 너무 슬프다서 미안해. –

0

다음과 같이 시도해보십시오.

ApprovalPeriod 모델에이 방법을 추가하십시오.

class ApprovalPeriod < ActiveRecord::Base 
    . 
    . 
    . 
    def increase_period 
    self.increase! :period 
    end 
end 

컨트롤러 :

def approve 
    @approval_period = ApprovalPeriod.find(params[:period_id]) 
    @approval_period.increase_period 
    redirect_to :back 
    flash[:notice] = "Approval Period Updated." 
end 
+0

안녕하세요. Kleber 님, 시도했지만이 오류가 발생합니다. ID없이 승인 기간을 찾을 수 없습니다. –