Я использую рельсы 4.0.8. Я добавил раздел комментария к модели под названием «Вещи», но я все равно получаю ту же ошибку. «Параметр отсутствует или значение пуст: вещь», когда я нажимаю кнопку отправки комментариев. Он говорит, что ошибка находится в контроллере Things #. Что я делаю не так?Ошибка: параметр отсутствует или значение пуст: вещь
UPDATE: я удалил путь URL из формы, но новая ошибка возвращает «Не удалось найти Thing без идентификатора». Ошибка находится в контроллере комментариев #.
ВЗГЛЯД НА ВЕЩЬ/ШОУ
<div id= "thing">
<h1>
<%= @thing.name %>
</h1>
<br>
<div id= "commentsection">
Comments
<div id= "comments">
<br>
<% @thing.comments.each do |c| %>
<%= c.username %>
<br>
<%= c.text %>
<% end %>
<%= form_for @comment, :url => thing_path do |f| %>
<%= f.label :username %>
<%= f.text_field :username %>
<%= f.label :comment %>
<%= f.text_field :text %>
<%= f.submit "Enter", class: "btn btn-small btn-primary" %>
<% end %>
</div>
</div>
</div>
ВЕЩИ CONTROLLER
class ThingsController < ApplicationController
def show
@thing = Thing.find(params[:id])
@thing.comments.build
@comment = Comment.new
end
def index
end
def new
@thing = Thing.new
@things = Thing.all
end
def create
@thing = Thing.new(thing_params)
if @thing.save
redirect_to @thing
else
render 'new'
end
end
private
def thing_params
params.require(:thing).permit(:name, :avatar)
end
end
КОММЕНТАРИИ CONTROLLER (я поставил звездочку вокруг линии, где ошибка)
class CommentsController < ApplicationController
def show
@comment = Comment.find(params[:id])
end
def new
@comment = Comment.new
@comments = Comment.all
end
def create
****@thing = Thing.find(params[:thing_id])****
@comment = @thing.comments.create(comment_params)
redirect_to thing_path(@thing)
end
end
private
def comment_params
params.require(:comment).permit(:user, :text, :upvotes, :downvotes, :thing_id)
end
end
МАРШРУТЫ
Website::Application.routes.draw do
get "comments/new"
get "comments/show"
get "things/new"
root 'home_page#home'
get "all/things/new" => 'things#new'
get "all/allthings"
resources :things
resources :good_comments
get "things/show"
get "things/results"
end
Спасибо! Я удалил бессмысленный URL-адрес, но теперь у меня появилась новая ошибка в комментарии # Controller: «Не удалось найти Thing без ID». Любая идея, почему это может быть? Мои модели настроены правильно, и каждый комментарий имеет thing_id. –
@ user3739453 Ваша форма должна быть '<% = form_for @thing, @comment do%>' В вашем 'Контроллере комментариев' вы запрашиваете' params [: thing_id] ', но URL-адрес вашей формы в настоящее время генерируется, если вы проверяете это '/ comments'. Это должно быть ''/thing /: thing_id/comments'', что также означает, что вам нужно настроить свои маршруты, чтобы включить 'resources: things do resources: comments end' – kittyminky
Хорошо, теперь это дает мне" невозможно написать неизвестный атрибут 'html' "и выделяет строку' <% = form_for @thing, @comment do | f | %> '. –