我有一个铁路练习项目,如博客网站用户通过rails 4设计gem。
它之前工作得很好。我在评论中已经有user_name
,它运行正常。但是当我通过post_user_name
添加colomn FixColumnName
时
它只是无法保存用户名,并且无法在帖子和评论中显示它们!怎么会这样?
(我在帖子表格中有post_user_name
,在评论表格中有user_name
。它们没有关联,但都使用设计current_user.username
。)
我的帖子索引erb:
<h1>Listing posts</h1>
<% if user_signed_in? %>
<div class="field">
<%= link_to 'Create a New Post', new_post_path, :class => "btn btn-success btn-sm" %>
</div>
<% end %>
<% @posts.each do |post| %>
<div class="post thumbnail">
<h3><%= post.name %></h3>
<div><h5>edit by <%= post.post_user_name %></h5></div>
<div><%= (post.descriptopm).html_safe %></div>
<% if user_signed_in? %>
<div class="bottom-bottoms">
<%= link_to 'Display', post, :class => "btn btn-info btn-xs" %>
<%= link_to 'Edit', edit_post_path(post), :class => "btn btn-info btn-xs" %>
<%= link_to 'Delete', post, method: :delete, data: { confirm: 'Are you sure?' }, :class => "btn btn-info btn-xs" %>
</div>
<% end %>
<h3>Comments</h3>
<% post.comments.each do |comment| %>
<div>
<p><strong><%= comment.user_name %></strong> : <%= (comment.body).html_safe %></p>
</div>
<% end %>
<%= bootstrap_form_for(@comment) do |f| %>
<% if @comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@comment.errors.count, "error") %> prohibited this comment from being saved:</h2>
<ul>
<% @comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<% if user_signed_in? %>
<div class="field">
<%= f.text_field :user_name, value: current_user.username, :disabled => true %>
</div>
<div class="field">
<%= f.text_area :body %>
</div>
<%= f.hidden_field :post_id, value: post.id %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<% end %>
</div>
<% end %>
后期文本字段:
<div class="field">
<%= f.text_field :post_user_name, value: current_user.username, :disabled => true, label: "Your Name" %>
</div>
我的帖子控制器
def post_params
params.require(:post).permit(:name, :post_user_name, :descriptopm)
end
我的评论控制器
def comment_params
params.require(:comment).permit(:user_name, :body, :post_id)
end
答案 0 :(得分:2)
取下表格中的:disabled => true
,它有效!!
但我真的不知道为什么? QQ
答案 1 :(得分:0)
为了给你更多信息,让我给你一些想法......
-
<强>协会强>
当你提到你正在为user_name
和Post
模型的每个调用Comment
属性时,这让我很畏缩。
原因是,如果你这样做,你就完全违背了DRY (Don't Repeat Yourself)&amp; Single Source Of Truth软件开发原则 - 这意味着您需要对整个应用程序中的方法/函数和数据保持单一引用
当您使用post.post_user_name
表格中的某个属性致电posts
时,您需要为自己设置麻烦:
-
您应该专注于在表中使用foreign_keys
而不是填充user_name
列,而是允许您引用关联表中的对象。这是ActiveRecord associations进来的地方:
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :posts
has_many :comments
end
#app/models/post.rb
Class Post < ActiveRecord::Base
belongs_to :user
delegate :name, to: :user, prefix: true #-> @post.user_name
#fields id | user_id | title | content | created_at | updated_at
end
#app/models/comment.rb
Class Comment < ActiveRecord::Base
belongs_to :user
delegate :name, to: :user, prefix: true #-> @comment.user_name
#fields id | user_id | title | content | created_at | updated_at
end
如您所见,如果您填充foreign_key
(在我们的案例中为user_id
),它将使我们能够从其他数据表中引用相应的对象。这意味着,而不是访问@post
对象&#34;用户名&#34;直接地,如果您已正确关联它,您就可以像username
这样引用@post.user_name
:foreign_key
-
<强>设置强>
让这个设置工作的诀窍是简单地设置#app/controllers/posts_controller.rb
Class PostsController < ApplicationController
def create
current_user.posts.create(post_params)
...
end
end
,使用对象或值:
{{1}}
这将根据需要为您设置所有关联