2014-12-01 5 views
-1

код моего проекта находится ниже: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.

ответ

0

Вы не можете делать сообщения всех пользователей, так это:

@articles = User.all.posts.paginate(page: params[:page]) 

не будет работать. Учитывая, что это не полиморфная ассоциация, вы должны уметь:

@articles = Post.all.paginate(page: params[:page]) 
+0

Это было действительно так близко, я был озадачен около 3 часов, спасибо – nikolay

Смежные вопросы