Act-As-Taggable 不保存到数据库

Act-As-Taggable not saving to database

您好,我正在尝试使用 act_as_taggable ruby gem 并遵循了 github 指南和最近的教程,并检查了堆栈溢出以获得建议。我的代码似乎都是正确的,但是当我尝试通过我的部分表单或通过 rails 控制台保存标签时,它们不会保存到数据库中。

相关代码摘录如下。

在此先感谢您的帮助!

post.rb

class Post < ActiveRecord::Base
  acts_as_taggable
  acts_as_taggable_on :tags
  validates :title, presence: true, length: {minimum: 5}
  validates :body, presence: true
  extend FriendlyId
  friendly_id :title, use: :slugged

end

post_controller.rb

class PostsController < ApplicationController

  before_action :find_post, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]

  def index
    if params[:tag].present? 
      @posts = Post.tagged_with(params[:tag]).paginate(:page => params[:page], :per_page => 10)
    else
      @posts = Post.all.order('created_at DESC').paginate(page: params[:page], per_page: 10)
    end
  end

  def new
    @post = Post.new
  end

  def show
  end

  def create
    @post = Post.new(post_params)

    if @post.save
      redirect_to @post, notice: "Article succesfully saved!"
    else
      render 'new', notice: "Try Again. I was unable to save your post."
    end
  end

  def edit
  end

  def update

    if @post.update(params[:post].permit(:title, :body))
      redirect_to @post, notice: "Article succesfully edited!"
    else
      render 'edit'
    end
  end

  def destroy
    @post.destroy
    redirect_to posts_path
  end

  private

  def post_params
    params.require(:post).permit(:title, :body, :slug, :tag_list => [])
  end

  def find_post
    @post = Post.friendly.find(params[:id])
  end

end

routes.rb

Rails.application.routes.draw do

  devise_for :users, :skip => :registrations
  root 'pages#home'
  resources :posts
  resources :portfolios
  get 'tags/:tag', to: 'posts#index', as: :tag
end

_form.html.erb

<%= form_for @post do |f| %>
  <% if @post.errors.any? %>
    <div id="errors">
      <h2><%= pluralize(@post.errors.count, "error") %> prevented this post from saving:</h2>
      <ul>
        <% @post.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
  <%= f.label :title %><br>
  <%= f.text_field :title, class: 'form-control form-control-lg' %><br>
  <br>
  <%= f.label :body %><br>
  <%= f.text_area :body, class: 'form-control form-control-lg', :rows => "10" %><br>
  <br>
  <%= f.label :tag_list, "Tags (separated by commas)" %>
  <%= f.text_field :tag_list, class: 'form-control' %>
  <br>
  <%= f.submit %>
<% end %>

摘自show.html.erb

<% @post.tags.any? %>
   <% @post.tags.each do |tag| %>
   <li><a href="#"> 
      <%= link_to tag.name, tag_path(tag.name) %>
   </a></li>
<% end %>

Pavan 请求的 _form 的参数日志:

Started PATCH "/posts/my-third-post-with-tags" for ::1 at 2015-09-23 15:56:36 +1000
Processing by PostsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"GwLMImKSDyhPt77nI+fhIkF4QVsFxMen851wjcVorrxOCdU+TcRKIZv1im4/oNx7DERYCI91vE9YDjvSda7MAg==", "post"=>{"title"=>"My third post with tags", "body"=>"to update your local repository to the newest commit, execute\r\ngit pull\r\nin your working directory to fetch and merge remote changes.\r\nto merge another branch into your active branch (e.g. master), use\r\ngit merge <branch>\r\nin both cases git tries to auto-merge changes. Unfortunately, this is not always possible and results in conflicts. You are responsible to merge those conflicts manually by editing the files shown by git. After changing, you need to mark them as merged with\r\ngit add <filename>\r\nbefore merging changes, you can also preview them by using\r\ngit diff <source_branch> <target_branch>", "tag_list"=>"tag, css"}, "commit"=>"Update Post", "id"=>"my-third-post-with-tags"}
  Post Load (0.1ms)  SELECT  "posts".* FROM "posts" WHERE "posts"."slug" = ?  ORDER BY "posts"."id" ASC LIMIT 1  [["slug", "my-third-post-with-tags"]]
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
Unpermitted parameter: tag_list
   (0.0ms)  begin transaction
   (0.0ms)  commit transaction
Redirected to http://localhost:3000/posts/my-third-post-with-tags
Completed 302 Found in 4ms (ActiveRecord: 0.3ms)


Started GET "/posts/my-third-post-with-tags" for ::1 at 2015-09-23 15:56:36 +1000
Processing by PostsController#show as HTML
  Parameters: {"id"=>"my-third-post-with-tags"}
  Post Load (0.1ms)  SELECT  "posts".* FROM "posts" WHERE "posts"."slug" = ?  ORDER BY "posts"."id" ASC LIMIT 1  [["slug", "my-third-post-with-tags"]]
  ActsAsTaggableOn::Tag Exists (0.1ms)  SELECT  1 AS one FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = ? AND "taggings"."taggable_type" = ? AND "taggings"."context" = ? LIMIT 1  [["taggable_id", 2], ["taggable_type", "Post"], ["context", "tags"]]
  ActsAsTaggableOn::Tag Load (0.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = ? AND "taggings"."taggable_type" = ? AND "taggings"."context" = ?  [["taggable_id", 2], ["taggable_type", "Post"], ["context", "tags"]]
  Rendered posts/show.html.erb within layouts/application (3.2ms)
  Rendered layouts/_header.html.erb (496.3ms)
  Rendered devise/shared/_links.html.erb (0.2ms)
  Rendered devise/sessions/_new.html.erb (4.6ms)
  Rendered layouts/_slideoutpanels.html.erb (460.2ms)
  Rendered layouts/_footer.html.erb (0.0ms)
Completed 200 OK in 1486ms (Views: 1484.3ms | ActiveRecord: 0.2ms)

您的错误来自 PostsController#update as HTML

在你不允许的控制器中tag_list

@post.update(params[:post].permit(:title, :body))