Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将2个参数添加到1个函数中?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何将2个参数添加到1个函数中?

Ruby on rails 如何将2个参数添加到1个函数中?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是Rails新手,我正在做Hartl的教程,但有时我想在代码中添加一些特别的东西。我现在正在做micropost,我想添加“删除”功能来删除micropost,但我希望此功能仅对管理员和制作此micropost的用户可见。现在我不知道该怎么做,因为当我想设置时,我得到了一个错误错误的参数数(给定1,预期为0)。 在session\u helper.rb中,我有函数def current\u usernotdef current\u user(micropost.user)我知道,但是我可以添加

我是Rails新手,我正在做Hartl的教程,但有时我想在代码中添加一些特别的东西。我现在正在做micropost,我想添加“删除”功能来删除micropost,但我希望此功能仅对管理员和制作此micropost的用户可见。现在我不知道该怎么做,因为当我想设置
时,我得到了一个错误
错误的参数数(给定1,预期为0)
。 在
session\u helper.rb
中,我有函数
def current\u user
not
def current\u user(micropost.user)
我知道,但是我可以添加这个micropost.user并完成吗?下面是所有代码:

app/views/micropost/_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>        
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    

如果当前用户==microspost.user,您只需检查
。没有理由向当前用户添加参数,这样做会使该方法的目的不那么明显。方法
current\u user(something)
绝不意味着当前用户和参数之间的相等检查,并且违反了相当常见的Rails实践,即定义一个名为
current\u user
的方法来返回当前经过身份验证的用户

如果要定义检查给定用户是否为当前用户的附加方法,应使用
current\u user?(user)
。它会像这样使用

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

如果当前用户==microspost.user
,您只需检查
。没有理由向当前用户添加参数,这样做会使该方法的目的不那么明显。方法
current\u user(something)
绝不意味着当前用户和参数之间的相等检查,并且违反了相当常见的Rails实践,即定义一个名为
current\u user
的方法来返回当前经过身份验证的用户

如果要定义检查给定用户是否为当前用户的附加方法,应使用
current\u user?(user)
。它会像这样使用

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

meagar是正确的,您不应该向该方法添加参数。但要考虑参数,您需要做的就是将def行更改为类似的内容,然后只需在您想调用它的地方引用
user
参数,这同样是个坏主意,但您是成年人

def current_user(user)

meagar是正确的,您不应该向该方法添加参数。但要考虑参数,您需要做的就是将def行更改为类似的内容,然后只需在您想调用它的地方引用
user
参数,这同样是个坏主意,但您是成年人

def current_user(user)

太简单了,我没想到。谢谢顺便说一句,你有什么建议我如何定义管理员的功能以及?当我以管理员的身份点击删除按钮时,我被重定向到root_url而没有删除帖子…他妈的太容易了,我根本没想过。谢谢顺便说一句,你有什么建议我如何定义管理员的功能以及?当我以管理员身份单击“删除”按钮时,我会被重定向到根目录url,而不会删除帖子。。。