简体   繁体   English

Rails-创建操作不会在数据库中保存记录

[英]Rails- Create action does not saving record in database

I'm developing a web project in Rails.我正在 Rails 中开发一个 web 项目。 There has a movies, books and series and users can write reviews about them.有电影、书籍和系列,用户可以写关于它们的评论。 I created review_controller and inside that i created new action but action does not working.我创建了 review_controller 并在其中创建了新操作,但操作不起作用。 In the view side I use simple_form.在视图方面,我使用 simple_form。 The page of new_review_path is coming but record does not save in database. new_review_path 的页面即将到来,但记录未保存在数据库中。 And also update action does not working either.而且更新操作也不起作用。

reviews_controller.erb评论控制器.erb

    class ReviewsController < ApplicationController
  @review = Review.new
  def index
    @reviews = Review.all
  end

  def show
    @review = Review.find(params[:id])
  end

  def new
    @review = Review.new
  end

  def create
    @review = Review.new(review_params)
    if @review.save
      redirect_to action: 'index'
    else
      render :new, notice: 'Error.'
    end
  end

  def edit
    @review = Review.find(params[:id])
  end

  def update
    @review = Review.find(params[:id])

    if @review.update(review_params)
      redirect_to @review
    else
      render :edit
    end
  end

  private

  def review_params
    params.require(:review).permit(:title, :content)
  end
end

new.html.erb新的.html.erb

<div class="container">
  <div class="row justify-content-md-center mt-5">
    <div class="col-6">
      <h1>New Review</h1>

      <%= simple_form_for @review do |f| %>
        <div>
          <%= f.label :title %><br>
          <%= f.text_field :title, class: 'form-control' %>
          <% @review.errors.full_messages_for(:title).each do |message| %>
            <div style="color: red;"><%= message %></div>
          <% end %>
        </div>

        <div>
          <%= f.label :content, class: 'mt-4' %><br>
          <%= f.text_area :content, class: 'form-control' %>
          <% @review.errors.full_messages_for(:content).each do |message| %>
            <div style="color: red;"><%= message %></div>
          <% end %>
        </div>

        <div>
          <%= f.button :submit, class: 'btn btn-primary mt-4' %>
        </div>
      <% end %>
    </div>
  </div>
</div>

_form.html.erb _form.html.erb

<div class="container">
  <div class="row justify-content-md-center">
    <div class="col-5">
      <%= simple_form_for @review do |form| %>
        <div>
          <%= form.label :title %><br>
          <%= form.text_field :title %>
          <% @review.errors.full_messages_for(:title).each do |message| %>
            <div><%= message %></div>
          <% end %>
        </div>

        <div>
          <%= form.label :content %><br>
          <%= form.text_area :content %><br>
          <% @review.errors.full_messages_for(:content).each do |message| %>
            <div><%= message %></div>
          <% end %>
        </div>

        <div>
          <%= form.submit %>
        </div>
      <% end %>
    </div>
  </div>
</div>

routes.rb路线.rb

Rails.application.routes.draw do
  get 'reviews/index'
  get 'reviews/new'
  devise_for :users
  root 'home#index'
  resources :reviews
end

I solved this problem doing by belongs_to:user, optional: true After Rails 5, user association need to be this relation.我通过belongs_to:user, optional: true解决了这个问题 在 Rails 5 之后,用户关联需要是这个关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM