2012-02-14 6 views
1

経由値と更新DBをインクリメントする方法は、私は、ビューを持っている:Railsの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動詞です。代わりに、あなたは読む(上記のあなたは、learn how to add more restful routesをルートにすることができます追加する1つの方法です)

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

のようなものをやって

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

としてroutes.rbを中approve_pathを追加する必要がありますルーティングについて詳しくは、Rails Routing from the Outside Inをご覧ください。

更新:

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

ラインは、上記のエラーを投げているものです。どこでもperiod_idを定義していません。来るパラメータはparams[:period]です。

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 

アン:メソッドでは、このうちの

アプローチ1

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

アプローチ2

要約:

その後、あなたはこれを行うことができますコントローラ内のd:

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

あなたはどんなスイートでもお使いいただけます。

+0

ご返信ありがとうございます。私は私が近いと思うが、私はリンクをクリックすると、次のエラーが発生している:未定義のローカル変数またはメソッドのための 'period_id '#

+0

@ 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なしでApprovalPeriodを見つけることができませんでした –