我正在尝试创建一个发布表单来发布网址&一些文字。嵌套表单提交时没有错误,但我无法在show动作控制器中显示该表单的后续内容。
发布模型
class Post < ActiveRecord::Base
has_many :texts
has_many :urls
accepts_nested_attributes_for :texts, :urls
end
文字模型
class Text < ActiveRecord::Base
belongs_to :post
end
网址模型
class Url < ActiveRecord::Base
belongs_to :post
end
后控制器
class PostsController < ApplicationController
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
@texts = @post.texts
@urls = @post.urls
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
private
def post_params
params.require(:post).permit(:texts_attributes => [:textattr], :urls_attributes => [:urlattr])
end
show.html.erb
<%= @text.textattr %>
<%= @url.urlattr %>
数据库架构
create_table "posts", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "texts", force: :cascade do |t|
t.text "textattr"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "post_id"
end
add_index "texts", ["post_id"], name: "index_texts_on_post_id"
create_table "urls", force: :cascade do |t|
t.string "urlattr"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "post_id"
end
add_index "urls", ["post_id"], name: "index_urls_on_post_id"
end
我在表单上按提交后出现错误消息 !(http://imgur.com/dzdss5z)
你的帮助会很棒 - 谢谢!
答案 0 :(得分:0)
@text
和@url
变量永远不会在控制器的show动作中设置,因此它们是零。因此,当您尝试在视图中调用这些属性时会出现错误。
您已设置@texts
和@urls
个变量,因此您可以执行以下操作:
<% @texts.each do |text| %>
<%= text.textattr %>
<% end %>
<% @urls.each do |url| %>
<%= url.urlattr %>
<% end %>