首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到没有ID的周刊(在Rails中删除)

找不到没有ID的周刊(在Rails中删除)
EN

Stack Overflow用户
提问于 2016-06-02 14:55:46
回答 1查看 130关注 0票数 0

在我的应用程序中,我有名为weekliesscores的模型。每周has_many评分,每周belongs_to评分,每周一次,用户一次。我的创建和显示方法工作得很好,但是当我尝试删除一个分数时,我就得到了Couldn't find Weekly without an ID

我的weekly#show页面是所有魔法发生的地方:

代码语言:javascript
复制
<h2>Your Previous Results</h2>
   <% @weekly.scores.each do |score| %>
     <p>
       <%= score.number %> Repetitions, <%= time_ago_in_words(score.created_at) %> ago 
       (<% if score.user_id = current_user %>
          <%= link_to 'Delete', [score], method: :delete %>
       <% end %> )
     </p>
   <% end %>

因为这是weekly#show页面,这是我的weeklies_controller,在我的头脑中应该有管辖权:

代码语言:javascript
复制
class WeekliesController < ApplicationController
  def index
    @weeklies = Weekly.all.order("created_at DESC")
    @most_recent_weekly = Weekly.order("created_at").last
  end

  def show
    @weekly = Weekly.friendly.find(params[:id])
    @score = Score.new
  end

  def new
    @weekly = Weekly.new
    @weekly.user_id = current_user
  end

  def create
    @weekly = Weekly.new(weekly_params)
    @weekly.user = current_user

    if @weekly.save
      flash[:notice] = "Workout of the week was saved successfully."
      redirect_to @weekly
    else
      flash.now[:alert] = "Error creating workout. Please try again."
      render :new
    end
  end

  def edit
    @weekly = Weekly.friendly.find(params[:id])
    @weekly.user_id = current_user
  end

  def update
    @weekly = Weekly.friendly.find(params[:id])

    @weekly.name = params[:weekly][:name]
    @weekly.teaser = params[:weekly][:teaser]
    @weekly.instructions = params[:weekly][:instructions]
    @weekly.difficulty = params[:weekly][:difficulty]
    @weekly.video = params[:weekly][:video]
    @weekly.user = current_user

    if @weekly.save
       flash[:notice] = "Workout was updated successfully."
      redirect_to @weekly
    else
      flash.now[:alert] = "Error saving workout. Please try again."
      render :edit
    end
  end

  def destroy
    @weekly = Weekly.friendly.find(params[:id])

    if @weekly.destroy
      flash[:notice] = "\"#{@weekly.name}\" was deleted successfully."
      redirect_to action: :index
    else
      flash.now[:alert] = "There was an error deleting the workout."
      render :show
    end
  end

  private
  def weekly_params
    params.require(:weekly).permit(:name, :teaser, :instructions, :video, :difficulty, :slug, :user_id)
  end
end

但是,由于我们删除了一个分数,并且错误引用了分数控制器(请参阅标线),下面是scores_controller

代码语言:javascript
复制
class ScoresController < ApplicationController
  before_action :authenticate_user!


  def index
      @weekly = Weekly.friendly.find(params[:weekly_id])
      @score = Score.new
      @scores = Score.all
  end

  def new
    @score = Score.new
  end

  def create
    @weekly = Weekly.friendly.find(params[:weekly_id])
    score = @weekly.scores.new(score_params)
    score.user = current_user

    if score.save
      flash[:notice] = "Results saved successfully."
      redirect_to [@weekly]
    else
      flash[:alert] = "Results failed to save."
      redirect_to [@weekly]
    end
  end

  def destroy
    @weekly = Weekly.friendly.find(params[:weekly_id])  <!-- ERROR CALLED ON THIS LINE -->
    score = @weekly.scores.find(params[:id])

    if score.destroy
      flash[:notice] = "Results were deleted successfully."
      redirect_to [@weekly]
    else
      flash[:alert] = "Results couldn't be deleted. Try again."
      redirect_to [@weekly]
    end
  end

  private

  def score_params
      params.require(:score).permit(:number, :user_id, :weekly_id)
  end
end

以下是适当的路线:

代码语言:javascript
复制
         reports POST   /reports(.:format)                     reports#create
          report DELETE /reports/:id(.:format)                 reports#destroy
        weeklies GET    /weeklies(.:format)                    weeklies#index
                 POST   /weeklies(.:format)                    weeklies#create
      new_weekly GET    /weeklies/new(.:format)                weeklies#new
     edit_weekly GET    /weeklies/:id/edit(.:format)           weeklies#edit
          weekly GET    /weeklies/:id(.:format)                weeklies#show
                 PATCH  /weeklies/:id(.:format)                weeklies#update
                 PUT    /weeklies/:id(.:format)                weeklies#update
                 DELETE /weeklies/:id(.:format)                weeklies#destroy
          scores GET    /scores(.:format)                      scores#index
                 POST   /scores(.:format)                      scores#create
       new_score GET    /scores/new(.:format)                  scores#new
      edit_score GET    /scores/:id/edit(.:format)             scores#edit
           score GET    /scores/:id(.:format)                  scores#show
                 PATCH  /scores/:id(.:format)                  scores#update
                 PUT    /scores/:id(.:format)                  scores#update
                 DELETE /scores/:id(.:format)                  scores#destroy

有人能帮助找出这个错误的来源吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-02 23:47:51

最后,这个问题是通过这样嵌套我的路线来解决的:

代码语言:javascript
复制
resources :weeklies do
  resources :scores
end

我必须将HTML更改为:

代码语言:javascript
复制
<%= link_to 'Delete', [score], method: :delete %>

代码语言:javascript
复制
<%= link_to 'Delete', [@weekly, score], method: :delete %>

这就消除了错误。

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

https://stackoverflow.com/questions/37595347

复制
相关文章

相似问题

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