我正在关注this教程为模型创建标签(在我的例子中是模型Post):
控制器/ posts_controller.rb:
def create
@user = current_user
@post = @user.posts.new(params[:post])
if @post.save
redirect_to @post, notice: 'post was successfully created.'
else
render action: "new"
end
@post.tag!(params[:tags])
end
视图/帖/ _form.html.erb:
<%= form_for(@post) do |f| %>
<%= render 'shared/error_messages' %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.text_area :content %>
</div>
<div class="field">
<%= f.label :tags %>
<%= f.text_field :tags, params[:tags] %>
</div>
<div class="actions">
<%= f.submit %>
</div>
视图/帖/ show.hmtl.erb:
<div class="tags">
<h4>Tags:</h4>
<%= render @post.tags %>
</div>
模型/ post.rb:
class Post < ActiveRecord::Base
has_and_belongs_to_many :tags
def tag!(tags)
tags = tags.split(" ").map do |tag|
Tag.find_or_create_by_name(tag)
end
self.tags << tags
end
end
模型/ tag.rb:
class Tag < ActiveRecord::Base
has_and_belongs_to_many :posts
end
分贝/迁移/(等...)_ create_tags.rb:
class CreateTags < ActiveRecord::Migration
def change
create_table :tags do |t|
t.string :name
end
create_table :tags_posts, :id => false do | t |
t.integer :tag_id, :post_id
end
end
end
现在,当我访问帖子表单时,我收到此错误:
undefined method `merge' for nil:NilClass
Extracted source (around line #13):
10: </div>
11: <div class="field">
12: <%= f.label :tags %>
13: <%= f.text_field :tags, params[:tags] %>
14: </div>
15: <div class="actions">
16: <%= f.submit %>
当我访问帖子时,我收到此错误:
SQLite3::SQLException: no such table: posts_tags: SELECT "tags".* FROM "tags" INNER JOIN "posts_tags" ON "tags"."id" = "posts_tags"."tag_id" WHERE "posts_tags"."post_id" = 7
Extracted source (around line #24):
21:
22: <div class="tags">
23: <h4>Tags:</h4>
24: <%= render @post.tags %>
25: </div>
26:
27: </div>
但是我可以在 schema.rb 文件中看到这些表:
create_table "tags", :force => true do |t|
t.string "name"
end
create_table "tags_posts", :id => false, :force => true do |t|
t.integer "tag_id"
t.integer "post_id"
end
有任何解决此问题的建议吗?
答案 0 :(得分:2)
你有一个向后的表名。 HABTM按字母顺序查找模型。仔细看看错误。它说无法找到posts_tags。您创建tags_posts。所以将表名更改为posts_tags。
答案 1 :(得分:2)
以防其他人通过谷歌遇到这个老问题: 您需要使用&#39; value:&#39;以简单形式显示默认值。
<%= f.text_field :tags, value: params[:tags] %>
答案 2 :(得分:1)
在您的部分_form.html.erb中尝试此<%= f.text_field_tag :tags, params[:tags] %>
。
答案 3 :(得分:0)
<%= form_with(
url: order_register_path(session[:order_id]),
method: :put
) do |form| %>
<%= form.check_box :review_budget %>
<%= form.check_box :fast_delivery %>
<%= form.check_box :replace_similar %>
<div>
<%= f.submit "Continuar" %>
</div>
<% end %>
f.submit
而不是那个submit_tag