Ruby on rails 在RubyonRails4中使用acts_as_taggable保存标记时遇到问题

Ruby on rails 在RubyonRails4中使用acts_as_taggable保存标记时遇到问题,ruby-on-rails,ruby,ruby-on-rails-4,acts-as-taggable,Ruby On Rails,Ruby,Ruby On Rails 4,Acts As Taggable,我试图在MicroPost模型上将act_as_taggable实现到我的Rails 4应用程序中,但程序没有保存标记,因此无法查看这些标记。用于标记和标记的表已被检索并存在于数据库中,但我实现的代码似乎都没有在提交表单时保存标记或创建标记。我几乎完全按照这本书中的步骤进行,但有些东西似乎不起作用 我不确定这是否是以rails 4为中心的问题和/或与rails中缺少“attr_accessible”代码有关。由于代码示例没有指定向microposts表添加任何内容,因此我只能假设连接是在其他地方

我试图在MicroPost模型上将act_as_taggable实现到我的Rails 4应用程序中,但程序没有保存标记,因此无法查看这些标记。用于标记和标记的表已被检索并存在于数据库中,但我实现的代码似乎都没有在提交表单时保存标记或创建标记。我几乎完全按照这本书中的步骤进行,但有些东西似乎不起作用

我不确定这是否是以rails 4为中心的问题和/或与rails中缺少“attr_accessible”代码有关。由于代码示例没有指定向microposts表添加任何内容,因此我只能假设连接是在其他地方建立的,但是我应该在哪里以及如何修复我在microposts_helper.rb中不知道的问题

提前谢谢。非常感谢您的帮助

相关代码段

Gemfile

...

gem 'acts-as-taggable-on', '~> 2.4.1'

...
microsops.rb

   class Micropost < ActiveRecord::Base     
   belongs_to :user  
   acts_as_taggable   
   acts_as_taggable_on :tags
   ... 
   end
microposts_helper.rb

module MicropostsHelper
    include ActsAsTaggableOn::TagsHelper
end
_microposts_form.html.rb

<%= form_for(@micropost) do |f| %>
  ...
  <div class="field">
    ...
    <%= f.label :tags %>
    <%= f.text_field :tag_list %>
  </div>
  <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
routes.rb

Dev::Application.routes.draw do
    ...
    resources :microposts, only: [:create, :destroy]
    ...
    match 'tagged', to: 'microposts#tagged', :as => 'tagged', via: 'get' 
end

我认为,表单中标签的输入变量应该是标签列表。i、 e

并更新_micropost.erb.html以使用标签列表


或者,您可以只更新您的模型以使用标记属性,即“acts_as_taggable_on:tag”

我认为,在表单中为标记输入变量应标记列表。i、 e

并更新_micropost.erb.html以使用标签列表


或者,您可以更新您的with模型以使用标记属性,即“acts_as_taggable_on:tag”

如果我正确理解了这个问题,您需要做的就是,基本上,告诉paramsstrong参数的推荐保护模型关于acts as taggable gem。你已经做了一半了:

private

    def micropost_params
      params.require(:micropost).permit(:content)
    end

    [...]
end
只需添加:

private

    def micropost_params
     params.require(:micropost).permit(:content, :tag_list => [])
    end

    [...]
end
此外,您可能需要在routes.rb文件中添加一项内容。。更换线路:

resources :microposts, only: [:create, :destroy]
与:


让我知道这些建议是否奏效。祝你好运

如果我正确理解了这个问题,那么您所需要做的就是,基本上,告诉paramsstrong_参数的推荐保护模型有关可标记gem的行为。你已经做了一半了:

private

    def micropost_params
      params.require(:micropost).permit(:content)
    end

    [...]
end
只需添加:

private

    def micropost_params
     params.require(:micropost).permit(:content, :tag_list => [])
    end

    [...]
end
此外,您可能希望向routes.rb文件中添加一个内容。。更换线路:

resources :microposts, only: [:create, :destroy]
与:


让我知道这些建议是否奏效。祝你好运

使用tags_list会通过“tags_list”的未定义方法导致错误。通过添加标签属性,您的意思是可以访问属性?将它添加到rails 4中,可以使attr_accessible'从rails中提取到一个gem中。请为paramsstrong_参数使用新的推荐保护模型,或将受保护的_属性添加到GEM文件中以使用旧的保护模型。我想这是有办法的,但sense act_as_taggable应该与rails 4兼容,如果我能发现我做错了什么就好了。谢谢你的帮助。@James:这就是我如何实现的,并且正在为我工作。因为,我使用的是旧应用程序中的模型和视图,所以我当时在gem文件中包含了受保护的属性gem。使用tags_list会导致一个错误,因为未定义的方法tags_list'用于。通过添加标签属性,您的意思是可以访问属性?将它添加到rails 4中,可以使attr_accessible'从rails中提取到一个gem中。请为paramsstrong_参数使用新的推荐保护模型,或将受保护的_属性添加到GEM文件中以使用旧的保护模型。我想这是有办法的,但sense act_as_taggable应该与rails 4兼容,如果我能发现我做错了什么就好了。谢谢你的帮助。@James:这就是我如何实现的,并且正在为我工作。因为,我使用的是旧应用程序中的模型和视图,所以我现在已经在Gemfile中包含了受保护的gem。谢谢你的回答。是的,我确实做到了这一点,但忘了更新原始问题。你是100&正确。谢谢你的回答。是的,我确实做到了这一点,但忘了更新原始问题。你100岁了&没错。
resources :microposts, only: [:create, :destroy]
resources :microposts, only: [:create, :destroy, :tag]