rails - 在 rails 脚手架上加载使用 ruby 制作的 "new" 页面时出错

rails - error loading "new" page made with ruby on rails scaffolding

我有一个简单的 rails 应用程序,其中包含我创建的设计设置和配置文件模型。我已经设置了我的关联并且一切似乎都很好,但是当我尝试使用新用户帐户访问 new_profile_path 时,我收到以下错误:

ProfilesController 中没有方法错误#new nil:NilClass

的未定义方法“构建”

提取的源代码(大约第 17 行): 15 16 17 18 19 20

def 新 @profile = current_user.profile.build respond_with(@profile) 结束

问题似乎出在我的配置文件控制器中,但我似乎无法弄清楚问题所在。这是我的配置文件控制器的完整代码:-

class ProfilesController < ApplicationController
  before_action :authenticate_user!
  before_action :set_profile, only: [:show, :edit, :update, :destroy]

  respond_to :html

  def index
@profiles = Profile.all
respond_with(@profiles)
  end

  def show
respond_with(@profile)
  end

  def new
@profile = current_user.build_profile
respond_with(@profile)
  end

  def edit
  end

  def create
@profile = current_user.build_profile(profile_params)
@profile.save
respond_with(@profile)
  end

  def update
@profile.update(profile_params)
respond_with(@profile)
  end

  def destroy
@profile.destroy
respond_with(@profile)
  end

  private
def set_profile
  @profile = Profile.find(params[:id])
end

def profile_params
  params.require(:profile).permit(:name, :civil, :email, :level, :employment_date, :mobile, :folder, :title, :internal, :nationality, :vacation, :work_email, :experience)
end
end

我的htmllink:-

<nav>
    <ul>
         <li><%= link_to root_path do %>
                <i class="fa fa-home"></i>Main
            <% end %>
        </li>
        <% if !current_user.profile.blank? %>
          <li><%= link_to profile_path(current_user.profile.id) do %>
             <i class="fa fa-user"></i>Employee Profile<i class="fa fa-sort-desc"></i>
          <% end %>
          <% else %>
                <li><%= link_to new_profile_path do %><i class="fa fa-user-plus"></i>Create Profile</li>
                <% end %>
          <% end %>
                <ul>
                    <li><%= link_to "Tasks / Activities", tasks_path %></li>
                    <li><%= link_to "Vacations", vacations_path %></li>
                </ul>
         </li>
         <li><%= link_to projects_path do %>
                <i class="fa fa-building-o"></i>Projects<i class="fa fa-sort-desc"></i>
                <% end %>
            <ul>
                <li><%= link_to active_path do %>Active Projects<i class="fa fa-caret-right"></i>
                    <% end %>
                    <ul>
                        <li><%= link_to "Preliminary Stage", presignature_path %></li>
                        <li><%= link_to "Design Stage", develop_path %></li>
                        <li><%= link_to "Tendered Stage", proposed_path %></li>
                    </ul>
                </li>
                <li><%= link_to "Archive", archive_path %></li>
            </ul>
         </li>
       <li><%= link_to project_docs_path do %>
        <i class="fa fa-folder-open"></i>Project Documents<i class="fa fa-sort-desc"></i>
        <% end %>
            <ul>
                <li><%= link_to "Preliminary Stage", presignature2_path %></li>
                <li><%= link_to development2_path do %>Design Stage<i class="fa fa-caret-right"></i>
                    <% end %>
                    <ul>
                        <li><%= link_to "Phase 1", phase1_path %></li>
                        <li><%= link_to "Phase 2", phase2_path %></li>
                        <li><%= link_to "Phase 3", phase3_path %></li>
                        <li><%= link_to "Phase 4", phase4_path %></li>
                    </ul>
                </li>
                <li><%= link_to "Tendered Projects", proposed2_path %></li>
            </ul>
       </li>
       <li><%= link_to search_path do %>
        <i class="fa fa-search"></i>Search
        <% end %>
       </li>
       <li><%= link_to reports_path do %>
        <i class="fa fa-file-text-o"></i>Reports
        <% end %>
       </li>
       <li><%= link_to feedback_path do %>
        <i class="fa fa-comment-o"></i>Feedback
        <% end %>
       </li>
    </ul>
</nav>

我的个人资料模型:

class Profile < ActiveRecord::Base
 belongs_to :user
end

我的用户模型:-

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_one :profile
end

我希望问题足够清楚。提前致谢!

更新:-

将配置文件控制器代码更新为上述代码后,我现在收到一个新错误:

配置文件中的 ActionController::UrlGenerationError#new

没有路由匹配 {:action=>"show", :controller=>"profiles", :id=>nil} 缺少必需的键:[:id]

提取的源代码(第 8 行附近): 5个 6个 7 8个 9 10 11

            <% end %>
        </li>
        <% if !current_user.profile.blank? %>
         <li><%= link_to profile_path(current_user.profile) do %>
        <i class="fa fa-user"></i>Employee Profile<i class="fa fa-sort-desc"></i>
     <% end %>
            <% else %>

它说这条线有问题:

  • <%= link_to profile_path(current_user.profile) 做 %>

  • current_user 还没有 profile,所以你不能调用 build。我想你想要的是:

    @profile = current_user.build_profile
    

    这是rails为您提供的自动生成的方法。 documentation 有点密集,但在这里。 This might be a little more readable.

    你试过吗?

    def new 
      @profile = Profile.new 
      respond_with(@profile) 
    end
    

    您可以随时在创建方法中调用 current_user。