我正在尝试访问"编辑"链接以编辑对象,但我收到此错误:
Param is missing or the value is empty: preview
基本上,我有两个通过关联链接的模型:
Game model
Review model
我在游戏的展示页面中渲染评论。当我尝试编辑评论时,它说我丢失了参数,或者评价控制器中的值为空。 路线也是嵌套的。我该如何解决这个问题?
提前致谢:)
的routes.rb
Rails.application.routes.draw do
devise_for :users
root "games#index"
resources :games do
resources :news
resources :reviews, except: [:show, :index]
resources :previews, except: [:show, :index]
end
resources :platforms
resources :genres
end
show.html.erb(链接到游戏控制器)
<% if @news.last.created_at > preview.updated_at %>
<p><%= link_to "edit", edit_game_preview_path(@game.id, preview.id) %></p>
<% end %>
<p><%= link_to "delete", game_preview_path(@game.id, preview.id), method: :delete %></p>
<% end %>
评论部分(表格)
<%= form_for [@game, @previews.new] do |r| %>
<h3 class="post_review">Preview this game</h3>
<p><%= flash[:notice_submit] %></p>
<p><%= r.text_field :title, placeholder: "Enter your tagline" %></p>
<p><%= r.text_area :content, placeholder: "Enter your review here" %></p>
<p><%= r.text_area :vote %></p>
<p><%= r.hidden_field :game_id, value: @game.id %></p>
<%= r.submit %>
<% end %>
评论控制器
class PreviewsController < ApplicationController
before_action :authenticate_user!
before_action :set_preview, only: [:show, :edit, :update, :destroy]
before_action :set_game
def new
@preview = Preview.new
end
def create
@preview = Preview.new(preview_params)
@preview.user_id = current_user.id
@preview.game_id = @game.id
@preview.username = current_user.username
if @preview.save
redirect_to :back
flash[:notice_submit] = "Thanks for you comment!"
else
redirect_to :back
flash[:notice_submit] = "Either you've already voted, or you're not filling in all forms."
end
end
def edit
@preview.update(preview_params)
redirect_to @game
end
def destroy
@preview.destroy
redirect_to @game
end
private
def set_preview
@preview = Preview.find(params[:id])
end
def set_game
@game = Game.find(params[:game_id])
end
def set_user
@user = User.find(params[:user_id])
end
def preview_params
params.require(:preview).permit(:title, :content, :vote)
end
end
答案 0 :(得分:0)
您收到此错误的原因是preview_params
您需要preview
个对象。
我认为edit
操作的控制器逻辑无效。对于edit
操作,您只需要set_preview
然后呈现编辑模板。 edit
操作中的当前逻辑应采用update
操作。
def edit
end
def update
@preview.update(preview_params)
redirect_to @game
end
表单的第一行也应该是:
<%= form_for [@game, @preview] do |r| %>