2016-10-18 15 views
0

私はHails1のチュートリアルをやっていますが、私は時々特別なものをコードに追加したいと思います。私はマイクロポストを今行っています。マイクロポストを削除するために "削除"機能を追加したいのですが、私はこの機能を管理者とこのマイクロポストを作ったユーザだけに見せたいと思っています。今私はそれを行う方法がわからないので、<% if current_user(micropost.user) && user.admin %>を設定したいときはエラーwrong number of arguments (given 1, expected 0)が出ます。 でsession_helper.rb私は機能を持っていますdef current_userdef current_user(micropost.user)私はそれを知っていますが、何とかこのmicropost.userを追加してこれを行うことができますか?すべてのコードベロー:1つの関数に2つの引数を追加するにはどうすればよいですか?

app/views/microposts/_micropost.html.erb

<li id="micropost-<%= micropost.id %>"> 
    <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> 
    <span class="user"><%= link_to micropost.user.name, micropost.user %></span> 
    <span class="content"><%= micropost.content %></span> 
    <span class="timestamp"> 
    Posted <%= time_ago_in_words(micropost.created_at) %> ago. 
    </span> 
    <% if current_user(micropost.user) && user.admin %> 
    <%= link_to "delete", micropost, method: :delete, 
         data: { confirm: "You sure?" } %> 
    <% end %> 
</li>   

app/helpers/session_helper.html.erb

def current_user 
    if (user_id = session[:user_id]) 
    @current_user ||= User.find_by(id: user_id) 
    elsif (user_id = cookies.signed[:user_id]) 
    user = User.find_by(id: user_id) 
    if user && user.authenticated?(:remember, cookies[:remember_token]) 
     log_in user 
     @current_user = user 
    end 
    end 
end  

答えて

2

あなたは、単にif current_user == micropost.userをチェックする必要があります。引数をcurrent_userに追加する理由はなく、そのようにするとそのメソッドの目的がはるかに明らかになります。メソッドcurrent_user(something)は、現在のユーザと引数の間の等価チェックを意味するものではなく、current_userというメソッドを定義して、現在認証されているユーザを返すかなり一般的なRailsの慣習に違反します。

追加のメソッドを定義して、指定されたユーザーが現在のユーザーかどうかを確認する場合は、current_user?(user)を使用する必要があります。これは、このような

<% if current_user?(micropost.user) && user.admin %> 

と定義された...このように使用されます:meagarが正しい

def current_user?(user) 
    current_user == user 
end 
+0

私はそれについて考えなかった。ありがとう! – hydroxyzinum

+0

私はadminのために機能を定義するにはどうすればよいですか?管理者として削除ボタンをクリックすると、投稿を削除せずにroot_urlにリダイレクトされます... – hydroxyzinum

0

、あなたはそのメソッドにパラメータを追加しないでください。しかし、パラメータを許可するには、defラインをそのようなものに変更してから、userという引数を参照してください。ここでも悪い考えですが、あなたは大人です。

def current_user(user) 
関連する問題