我对rails非常陌生,并试图通过构建个人资料页面来进行练习。我已经实现了设计,一旦用户登录,他们就可以点击显示包含相关信息的个人资料的链接。现在它只是显示他们的名字,出生日期和性别。我想它也显示它们的图像。所以我已经捆绑了paperclip gem并阅读了一些教程来尝试配置它。我已经准备好了代码,因此用户可以点击“选择文件”。并选择一个图像。但是,当我点击更新'它给我一个错误。我希望图片能够显示在他们个人资料的同一个展示页面上。
profiles_controller.rb
class Users::ProfilesController < ApplicationController
def edit
@profile = Profile.create(params[:photo])
end
def create
end
private
def profile_params
params.require(:profile).permit(:photo)
end
end
简档/ edit.html.erb
<h2>Edit Account Profile </h2>
<%= form_for(@profile, url: profiles_edit_path(@profile), html: { :multipart => true }) do |f| %>
<li>
<%= f.label :photo, "Photo" %>
<%= f.file_field :photo %>
</li>
<div class="actions">
<%= f.submit "Update" %>
</div>
<% end %>
<%= link_to "Back", :back %>
注册/ show.html.erb
<%= image_tag @profile.photo.url %>
<br>
<%= @user.email %>
<br>
<%= @user.first_name %>
<%= @user.last_name %>
<br>
<%= @user.date_of_birth %>
<br>
<%= @user.is_female %>
registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
def show
@user = User.find(params[:id])
end
private
def sign_up_params
params.require(:user).permit(:first_name, :last_name, :is_female, :date_of_birth, :email, :password, :password_confirmation)
end
def account_update_params
params.require(:user).permit(:first_name, :last_name, :is_female, :date_of_birth, :email, :password, :password_confirmation, :current_password)
end
end
的routes.rb
Rails.application.routes.draw do
devise_for :users, :controllers => { :registrations => 'users/registrations', :profiles => 'users/profiles' }
devise_scope :user do
get 'profiles/edit' => 'users/profiles#edit'
post 'profiles/edit' => 'users/profiles#edit'
get 'users/:id' => 'users/registrations#show', as: :user
end
root to: "home#index"
end
点击更新后出错:
路由错误 没有路线匹配[PATCH]&#34; /profiles/edit.21"
我感谢您的帮助,如果需要进一步的信息,请告诉我。
答案 0 :(得分:0)
尝试将此路由添加到devise_scope以传递该错误
patch 'profiles/edit' => 'users/profiles#edit'
btw,在ProfilesController中
create
行动edit
操作中,您应该加载现有的个人资料并渲染编辑视图<强>更新强>
edit
视图中的update
,我们需要再次获取配置文件并为其更新数据您的路线不正确,在修改个人资料时,我们应该提交一个类似于users/profiles/4/update
的网址
您可以按以下方式声明路线
devise_for :users, :controllers => { :registrations => 'users/registrations' }
namespace :users do
resources :profiles
end
在update
操作中,您检索该个人资料p = Profile.find(params[:id])
并更新p.photo = params[:photo]; p.save
或您想要的任何内容
答案 1 :(得分:0)
尝试:
patch 'profiles/:id' => 'users/profiles#update'
和表单助手应该是这样的:
<%= form_for(@profile, html: { :multipart => true }) do |f| %>
希望它对你有所帮助!!