首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoMethodError (尝试创建表项时#<PersonalTrainer:0x000055625dbfd7a8>的未定义方法‘NoMethodError’

NoMethodError (尝试创建表项时#<PersonalTrainer:0x000055625dbfd7a8>的未定义方法‘NoMethodError’
EN

Stack Overflow用户
提问于 2020-03-30 03:58:34
回答 1查看 28关注 0票数 0

我试图在rails中向表中添加项,但在标题中遇到错误。它在本地对我有效,但在heroku上它给出了这个错误。我已经看到了几种解决方案,但似乎都不起作用。这是我的控制器:

代码语言:javascript
复制
require './app/policies/personal_trainer_policy'
class PersonalTrainersController < ApplicationController
  before_action :set_personal_trainer, only: [:show, :edit, :update, :destroy]

  # GET /personal_trainers
  # GET /personal_trainers.json
  def index
    @personal_trainers = PersonalTrainer.all

  end

  # GET /personal_trainers/1
  # GET /personal_trainers/1.json
  def show

  end

  # GET /personal_trainers/new
  def new
    @personal_trainer = PersonalTrainer.new
  end

  # GET /personal_trainers/1/edit
  def edit
  end
  def personal_trainer_policy
    @_personal_trainer_policy ||= PersonalTrainerPolicy.new(personal_trainer)
  end 

  # POST /personal_trainers
  # POST /personal_trainers.json
  def create
    @personal_trainer = PersonalTrainer.new(personal_trainer_params)
    authorize @personal_trainer
    if @personal_trainer.persist
      render json: @personal_trainer.record
    else
      render json: @personal_trainer.errors, status: :unpocessably_entity
    end

    respond_to do |format|
      if @personal_trainer.save
        format.html { redirect_to @personal_trainer, notice: 'Personal trainer was successfully created.' }
        format.json { render :show, status: :created, location: @personal_trainer }
      else
        format.html { render :new }
        format.json { render json: @personal_trainer.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /personal_trainers/1
  # PATCH/PUT /personal_trainers/1.json
  def update
    authorize @personal_trainer

    respond_to do |format|
      if @personal_trainer.update(personal_trainer_params)
        format.html { redirect_to @personal_trainer, notice: 'Personal trainer was successfully updated.' }
        format.json { render :show, status: :ok, location: @personal_trainer }
      else
        format.html { render :edit }
        format.json { render json: @personal_trainer.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /personal_trainers/1
  # DELETE /personal_trainers/1.json
  def destroy
    authorize @personal_trainer

    @personal_trainer.destroy
    respond_to do |format|
      format.html { redirect_to personal_trainers_url, notice: 'Personal trainer was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_personal_trainer
      @personal_trainer = PersonalTrainer.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def personal_trainer_params
      params.require(:personal_trainer).permit(:firstName, :secondName, :desription, :amountOfClients)
    end
end

控制器是使用脚手架生成的。这是我的erb文件:

代码语言:javascript
复制
<p id="notice"><%= notice %></p>

<h1 class = "title">Personal Trainers</h1>
<div class = "page-conatiner">

<table class = "table">
  <thead>
  <%= stylesheet_link_tag 'gym_classes', media: 'all', 'data-turbolinks-track': 'reload' %>
    <tr>
      <th>First Name</th>
      <th>Second Name</th>
      <th>Desription</th>
      <th>Amount of Clients</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @personal_trainers.each do |personal_trainer| %>


      <tr>
        <td><%= personal_trainer.firstName %></td>
        <td><%= personal_trainer.secondName %></td>

        <td><%= personal_trainer.desription %></td>
        <td><%= personal_trainer.amountOfClients %></td>
        <td><%= link_to 'Show', personal_trainer %></td>
        <td><%= link_to 'Edit', edit_personal_trainer_path(personal_trainer) %></td>
        <td><%= link_to 'Destroy', personal_trainer, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<% if current_user.admin == true %>
<%= link_to 'New Personal Trainer', new_personal_trainer_path %>
<% end %>
</div>

这是我的模型:

代码语言:javascript
复制
class PersonalTrainer < ApplicationRecord
    has_many :gym_class_final
    has_many :pt_client

end

我有它的设置,以便管理员只能创建新的项目使用一个策略,并添加授权@personal_trainer。我想知道这是否与错误有关。我只是不明白它在本地是如何工作的,而不是在部署的时候。有什么建议吗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-30 04:01:12

persist不是活动记录对象上的有效方法,您正在查找save

代码语言:javascript
复制
if @personal_trainer.save
  render json: @personal_trainer.record
else
  render json: @personal_trainer.errors, status: :unpocessably_entity
end

有关可用于活动记录持久性的方法的更多信息,请参阅https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html (Rails 6)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60919998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档