gpt4 book ai didi

ruby-on-rails - 在代码中的其他地方设计渲染符号 => up/in form partials

转载 作者:行者123 更新时间:2023-12-04 16:23:19 25 4
gpt4 key购买 nike

我刚开始使用 Devise 和 Rails3。我已经完成身份验证并开始工作并了解基础知识。

截至目前,在代表我的主页/首页的主页 Controller 中,我有两个链接,一个链接到注册 => sign_up,另一个链接到登录/注销 => sign_in/sign_out。

但是我不想将我的用户重定向到登录页面。相反,我想在首页上显示我的登录表单。所以我分开了devise/session/new模板 int 到 View 和 _form.html.erb 部分。

现在在我的主 View 中,我将登录表单呈现为:

<% if user_signed_in? %>
Welcome: <b><%= current_user.username %> (<%= current_user.group.name %>)</b>
<%= link_to "Logout", destroy_user_session_path, :method => 'delete' %>
<% else %>
<%= render 'devise/sessions/form' %> // Rendering the partial here
<%= link_to "Login", new_user_session_path %>
<% end %>
<hr>

这是部分的代码:
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>

<div><%= f.label :password %><br />
<%= f.password_field :password %></div>

<% if devise_mapping.rememberable? -%>
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
<% end -%>

<div><%= f.submit "Sign in" %></div>
<% end %>

我的错误如下:
NameError in Home#index

Showing devise/sessions/_form.html.erb where line #1 raised:

undefined local variable or method `resource' for #<#<Class:0x614ec68>:0x6157ff8>
Extracted source (around line #1):

1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2: <div><%= f.label :email %><br />
3: <%= f.email_field :email, :autofocus => true %></div>
4:

我明白为什么会发生错误。这是因为部分它没有被赋予资源属性。我用过 dump(resource)事实证明它是一个用户模型/对象所以我在它之前添加了以下内容:
<% if @user %>
<% resource = @user %>
<% end %>

并将以下内容添加到我的 Home Controller 索引方法中:
def index
@user = User.new
end

但是在那之后我得到了资源名称错误,结果只是 :user如果我设置了,那么我会因为 devise_mapping.rememberable? 而遇到问题我不知道如何提供。

我想正确地做到这一点,所以我想避免我开始的困惑和不合逻辑的方法。

最佳答案

看看这个问题的答案:Devise form within a different controller

您尝试使用 Home Controller 呈现的表单依赖于 Devise 定义的助手,这些助手无法从非 Devise Controller 访问。

将必要的助手添加到您的 home_helper.rb 应该可以解决您的问题:

def resource_name
:user
end

def resource
@resource ||= User.new
end

def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end

关于ruby-on-rails - 在代码中的其他地方设计渲染符号 => up/in form partials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15348421/

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