gpt4 book ai didi

ruby-on-rails - Ruby on Rails,未定义的方法合并

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:28 24 4
gpt4 key购买 nike

首先,请允许我向有经验的人提出简单的问题,但现在对我来说很难。在 views/_form.html.erb 之一的 Rails 中,我想更改下面的行(有效):

    <%= f.collection_select :user_id, User.all, :id, :email %>

进入隐藏字段,该字段将保存登录用户的 ID。我尝试将其更改为:

    <% f.hidden_field :user_id, :id %>

但是它抛出一个错误:

    NoMethodError in Orders#new
undefined method `merge' for :id:Symbol

有人能帮我解决这个问题吗?

最佳答案

使用这个(如果您已经有可用的 current_user 方法):

<%= f.hidden_field :user_id, :value => current_user.id %>

如果你没有实现 current_user 方法,在你相应的 Controller 中,你可以有这样的东西:

@current_user = User.find(params[:user_id])

然后,在您看来,您可以:

<%= f.hidden_field :user_id, :value => @current_user.id %>

更新

经过上面的对话,如果你想使用session来存储user_id,那么你可以这样做。

您可以创建一个 SessionsHelper 模块(您可以将其包含在您的 ApplicationController 中),您可以在其中定义一个 log_in 方法:

  # Logs in the given user.
def log_in(user)
session[:user_id] = user.id
end

(您也可以将此:session[:user_id] = user.id 放在创建用户的 create 操作中。)

你也可以在这个模块中定义一个current_user方法:

  # Returns the current logged-in user (if any).
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end

以下是您可以添加到此模块中的其他一些有用的辅助方法:

  # Returns true if the given user is the current user.
def current_user?(user)
user == current_user
end

# Returns true if the user is logged in, false otherwise.
def logged_in?
!current_user.nil?
end

# Logs out the current user.
def log_out
session.delete(:user_id)
@current_user = nil
end

最后,我建议你看看Devise gem,这是一种非常流行的 Rails 应用程序身份验证解决方案。

关于ruby-on-rails - Ruby on Rails,未定义的方法合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32385181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com