我正在尝试学习如何在我的Rails 5应用程序中使用命名空间文件夹。
我使用简单的表格形式。
我有用户和个人资料的模型。
协会是:
用户
has_one :profile, dependent: :destroy
资料
belongs_to :user
在我的控制器中,我有app / controllers / users / profiles_controller.rb
那有:
class Users::ProfilesController < ApplicationController
before_action :set_profile, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
after_action :verify_authorized
def index
@profiles = Profile.all
authorize @profiles
end
def show
# debugger
end
def new
@profile = Profile.new
authorize @profile
end
def edit
end
def create
@profile = Profile.new(profile_params)
authorize @profile
respond_to do |format|
if @profile.save
format.html { redirect_to @profile }
format.json { render :show, status: :created, location: @profile }
else
format.html { render :new }
format.json { render json: @profile.errors, status: :unprocessable_entity }
end
end
end
def update
# Rails.logger.info "xxxxxxxxxxxxx"
# Rails.logger.info successful.inspect
# user=@profile.user
respond_to do |format|
if @profile.update(profile_params)
format.html { redirect_to @profile }
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 profiles_url }
format.json { head :no_content }
end
end
private
def set_profile
@profile = Profile.find(params[:id])
authorize @profile
end
def profile_params
params.require(:profile).permit( :title, :hero, :avatar, :overview, :occupation, :external_profile )
end
end
在我的观点中,我有一个类似的文件夹结构。我有app / views / users / profiles。该文件夹有一个名为_header.html.erb的部分,一个_form.html.erb和一个edit.html.erb
我从users / show.html.erb文件中渲染header.html.erb。这很好。但是,我无法弄清楚如何让编辑个人资料链接起作用。
在我的_header.html.erb部分我有:
<%= link_to "Update your profile", edit_profile_path(:user, @profile.id) %>
我已经尝试了至少20个这一行的变体 - 但它们都不能用于访问用户/个人资料/编辑视图。
我的佣金路线告诉我:
user_profiles GET /users/:user_id/profiles(.:format) users/profiles#index
POST /users/:user_id/profiles(.:format) users/profiles#create
new_user_profile GET /users/:user_id/profiles/new(.:format) users/profiles#new
edit_profile GET /profiles/:id/edit(.:format) users/profiles#edit
profile GET /profiles/:id(.:format) users/profiles#show
PATCH /profiles/:id(.:format) users/profiles#update
PUT /profiles/:id(.:format) users/profiles#update
DELETE /profiles/:id(.:format) users/profiles#destroy
在我看来,关键是:
edit_profile GET /profiles/:id/edit(.:format) users/profiles#edit
我只是不明白出了什么问题。我认为这应该意味着我可以写:
<%= link_to "Update your profile", edit_profile_path(@profile) %>
这也不起作用。
每个错误都指向我的个人资料表单的第一行,其中包含:
<%= simple_form_for [:user, @profile] do |f| %>
我写了#34;用户&#34;在这一行,因为命名空间的建议是这样做的。
在我的routes.rb文件中,我有:
resources :users, shallow: true do
scope module: :users do
resources :assign_roles
resources :identities
resources :profiles
resources :settings
end
end
任何人都可以帮助我了解插入它需要什么吗?