如何在个人资料页面上显示回形针图像?

时间:2015-08-27 12:11:44

标签: ruby-on-rails image devise paperclip image-uploading

我对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"

我感谢您的帮助,如果需要进一步的信息,请告诉我。

2 个答案:

答案 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| %>

希望它对你有所帮助!!