код моего проекта находится ниже:Rails сообщений отношения
posts_controller.rb:
class PostsController < ApplicationController
before_action :signed_out_user
def index
end
def create
@post = current_user.posts.build(post_params)
if @post.save
flash[:success] = "Post created!"
redirect_to root_url
else
render 'welcome/home'
end
end
def destroy
end
private
def post_params
params.require(:post).permit(:content, :title)
end
end
welcome_controller.rb:
class WelcomeController < ApplicationController
layout "application"
def index
end
def about
end
def home
@post = current_user.posts.build if signed_in?
end
end
user_controller.rb
class UsersController < ApplicationController
.
.
.
def show
@user=User.find(params[:id])
@posts = @user.posts.paginate(page: params[:page])
end
.
.
.
end
user.rb:
class User < ActiveRecord::Base
has_many :posts, dependent: :destroy
before_save { self.email = email.downcase }
before_create :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
def User.new_remember_token
SecureRandom.urlsafe_base64
end
def User.encrypt(token)
Digest::SHA1.hexdigest(token.to_s)
end
private
def create_remember_token
self.remember_token = User.encrypt(User.new_remember_token)
end
end
post.rb:
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :id
default_scope -> { order('created_at DESC') }
validates :user_id, presence: true
validates :content, presence: true, length: { maximum: 140 }
validates :title, presence: true, length: { maximum: 85 }
end
Этот код позволяет создавать сообщения с заголовком и отображения его на потребителе шоу действий (например, Twitter, Michael Hartl). Q: Как я должен это изменить, кроме отображения сообщения в профиле пользователя, он также создает новую страницу с тем же контентом, который может быть прокомментирован, совместно использован или на другом (только в созданном странице! Не в профиле пользователя). В конце концов, Q: как отображать сообщения всех пользователей на главной странице, я пытаюсь сделать следующий:
welcome_controller.rb:
class WelcomeController < ApplicationController
layout "application"
def index
end
def about
end
def home
@post = current_user.posts.build if signed_in?
@articles = User.all.posts.paginate(page: params[:page])
end
end
_post.html.erb:
<li>
<span class="article"><%= post.title %></span>
<span class="content"><%= post.content %></span>
<span class="timestamp">
<div id="info">
<p>Posted <%= time_ago_in_words(post.created_at) %></p>
</div>
</span>
</li>
home.html.erb:
.
.
.
<div id="articles">
<%= render @post %>
</div>
.
.
.
, но я получаю следующее сообщение об ошибке:
NoMethodError in WelcomeController#home
undefined method `posts' for #<ActiveRecord::Relation::ActiveRecord_Relation_User:0x4d151d8>
Чтобы повысить разборчивость моего описания, я прикрепить picture.
Это было действительно так близко, я был озадачен около 3 часов, спасибо – nikolay