2016-11-22 2 views
0

Rails 5アプリケーションでヘルパーを使用する方法を学習しようとしています。Rails 5 - ビューヘルパーの作成方法

私はorg_requestsモデルを持っています。このモデルには、さまざまなステップが取られた日付を保持する属性があります。私は、関連するコントローラアクションが保存されているときにコントローラを使用してこれらの属性を更新しようとしています。

たとえば、私にはapproved_atという属性があります。承認されたアクションが保存されるとき、

@org_request.update_attribute(approved_at: Time.zone.now) 

は今、時間を節約する必要があります。私はこのラインを考える

def approved 
    @org_request = current_user.organisation.org_requests.find(params[:id]) 

    if @org_request.state_machine.transition_to!(:approved) 
     @org_request.update_attribute(approved_at: Time.zone.now) 
     flash[:notice] = "You've added this member." 
     redirect_to org_requests_path 
    else 
     flash[:error] = "You're not able to manage this organisation's members" 
     redirect_to :index 
    end 
    end 

:私のコントローラでは、私はと呼ばれるアクションがで承認されています。

私の見解では、関連するアクションが行われた時間を表示しようとしています。これを行うには、私が書くしようとしている:

<% @org_requests.each do |org_req| %> 
<%= text_for_time_of_status_change(org_req.current_state) %>   

私は、持っているヘルパーている:それは勝ったので、私は私のヘルパーので、(のようなorg_requestを与えることができないんだけど

def text_for_time_of_status_change(current_state) 
     case current_state 
      when 'requested' 
      org_request.requested_at.try(:strftime, ' %l:%M %e %B %Y') 
      when 'approved' 
      org_request.approved_at.try(:strftime, ' %l:%M %e %B %Y') 
      when 'rejected' 
       org_request.rejected_at.try(:strftime, ' %l:%M %e %B %Y') 
      when 'removed' 
      org_request.removed_at.try(:strftime, ' %l:%M %e %B %Y') 
     end 
    end 

を'を受け入れる'):

def text_for_time_of_status_change(org_request.current_state) 

これは正しくありません。私はorg_requestの前に@を使用する必要があるかどうかもわかりません(私はそれを試してみるとエラーになります)。

誰かがビューヘルパーを使用するために必要なことを誰でも見ることができますか?

これらの記事:http://6ftdan.com/allyourdev/2015/01/28/rails-helper-methods/は、ヘルパーがプレゼンテーションロジックに使用されることを意図していないようです。たぶんそれは他の種類の行動を意図しているのかもしれない。私は適切な目的のためにヘルパーを使用しようとしているのかどうかはわかりません。

+0

エラーあなたは何を得るのか? – sa77

+0

あなたはどうしていますか?私はヘルパーにorg_requestをそうすることができません。(それは '。'を受け入れないためです) " –

答えて

1

text_for_time_of_status_changeメソッドを更新し、org_req.current_stateの代わりにorg_reqを渡す必要があります。変数org_requestにアクセスしたいが、それをヘルパーメソッドに渡さなかったため、エラーが発生しています。あなたはcase

0

org_request.current_state代わりのcurrent_stateを呼び出すので、この変更は、ヘルパーメソッドのコードを更新することを忘れないでくださいした後、あなたのhelperを修正しなければならないし、あなたの場合には、部分的に使用する方がよいでしょう:

ヘルパー:

部分の作成よりも
def text_for_time_of_status_change(org_request) 
    case org_request.current_state 
    when 'requested' 
    org_request.requested_at.try(:strftime, ' %l:%M %e %B %Y') 
    when 'approved' 
    org_request.approved_at.try(:strftime, ' %l:%M %e %B %Y') 
    when 'rejected' 
    org_request.rejected_at.try(:strftime, ' %l:%M %e %B %Y') 
    when 'removed' 
    org_request.removed_at.try(:strftime, ' %l:%M %e %B %Y') 
    end 
end 

_requested.html.erb部分的にビューの使用コレクションに比べ
<%= text_for_time_of_status_change(org_request) %> 

<%= render partial: 'requested', collection: @org_requests, as: org_request %> 
+0

ありがとうございました。コレクションの一部を使う方が良い理由は何ですか? – Mel

+0

パーシャルはよりセクシーなように見えます。この場合、ビューで論理を避けます(レールの方法) –

関連する問題