ruby-on-rails - 没有路由匹配 {:action=>"new", :controller=>"profiles", :id=>"address"},缺少必需的键:[:user_id]
问题描述
我使用 Device 并将“邪恶”的 gem 添加到我的 Rails 应用程序中。在我的 RegistrationsController 中,我定义了以下内容:
class Users::RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
super
end
def update
super
end
protected
def after_sign_up_path_for(resource)
user_steps_path
end
def after_update_path_for(resource)
new_user_profile_path(current_user.id)
end
end
基本上,我希望我的表格在注册后能更进一步,即地址:
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :address
def show
@user = current_user
render_wizard
end
end
在用户给出他的地址后,我希望他/她被重定向到他们的个人资料,他们也可以在其中提供关于他们自己的信息。我的想法,这是我的 RegistrationsController 中的更新操作。或者,在我的多步骤表单完成后,我如何重定向到配置文件,这意味着步骤地址已完成?这是address.html.erb:
<%= form_for @user, url: wizard_path do |f| %>
<div class="field">
<%= f.label :street %>
<%= f.text_area :street %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
现在 ActionContoller 抱怨我的标头路由并寻找 id 地址,但我不明白为什么......这是我的 ProfilesContorller:
class ProfilesController < ApplicationController
before_action :set_profile, only: [:show, :edit, :update, :destroy]
def show
@user = User.eager_load(:profile).find(params[:user_id])
@profile = @user.profile
@review = Review.new
@reviews = Review.where(profile: @profile)
end
def new
@user = current_user
@profile = Profile.new
end
def edit
@profile = @user.profile
end
def create
@user = current_user
@profile = @user.build_profile(profile_params)
respond_to do |format|
if @profile.save
format.html { redirect_to user_profile_path(current_user.id), notice: 'Profile was successfully created.' }
format.json { render :show, status: :created, location: @profile }
else
format.html { render :new, notice: 'Did not save' }
format.json { render json: @profile.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @profile.update(profile_params)
format.html { redirect_to user_profile_path(current_user.id), notice: 'Profile was successfully updated.' }
format.json { render :show, status: :ok, location: @profile }
else
format.html { render :edit }
format.json { render json: @profile.errors, status: :unprocessable_entity }
end
end
end
def destroy
@profile.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'Profile was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def set_profile
@profile = current_user.profile
end
def profile_params
params.permit(:about, :avatar)
end
end
这是我的 header.html.erb 中的错误部分
<% if current_user.profile == nil %>
<li><span class="bg-primary text-white rounded"><%= link_to 'Create profile', new_user_profile_path%></span></li>
<% else %>
<li><span class="bg-primary text-white rounded"><%= link_to 'My profile', user_profile_path(@user) %></span></li>
<% end %>
<li><span class="bg-primary text-white rounded"><%= link_to 'Log out', destroy_user_session_path, method: :delete %></span></li>
ActionController 基本上抱怨第二行和“new_user_profile_path”。地址是如何进入配置文件控制器的 -> 新的 -> id 以及如何处理标题中提到的错误。谢谢!
解决方案
根据您的错误,user_id
您的路线中缺少
试试,new_user_profile_path(@user)
在第二行
所以最后应该是<%= link_to 'Create profile', new_user_profile_path(@user)%>
推荐阅读
- sas - 宏变量作为数据步骤中的数字
- assembly - 如何在 MIPS 中传递 10 个参数?
- sql - 搜索与性能良好的一组范围匹配的记录
- go - type interface {} 不支持索引
- c# - 如何在标头中使用 cookie 进行 POST 请求,例如 cURL 请求
- git - 在 filter-branch 之后删除无用的合并(那些没有任何“非主线”提交的合并)
- regex - Pandas - 提取括号之间的特定值
- android - 如何在android中设置正确的警报/通知时间?
- jenkins - 如何使用 ecs 构建代理配置 jenkins?容器在第一次构建后停止,主节点和节点之间的连接断开
- powershell - 如何修复批处理文件中的 /f 循环以在目录中运行多个 powershell 脚本