Ruby on rails 铁路3号及;设计:跟踪谁拥有用户帖子的个人资料

Ruby on rails 铁路3号及;设计:跟踪谁拥有用户帖子的个人资料,ruby-on-rails,post,devise,identify,Ruby On Rails,Post,Devise,Identify,我的应用程序有一个用户模型和一个帖子模型,其中用户有很多帖子,帖子属于用户。帖子显示在用户的个人资料页面上。我想让任何用户都能够发布自己的,或任何其他用户的个人资料页面。然而,我遇到的问题是,虽然我知道谁在发帖(当前用户),但我不知道当前用户的个人资料在谁的个人资料上。我需要知道这一点,以便将新帖子分配给该用户的帖子。如何从当前查看的配置文件中提取用户id信息,以便我知道在哪里分配新帖子 我的micropost控制器看起来像: class MicropostsController < Ap

我的应用程序有一个用户模型和一个帖子模型,其中用户有很多帖子,帖子属于用户。帖子显示在用户的个人资料页面上。我想让任何用户都能够发布自己的,或任何其他用户的个人资料页面。然而,我遇到的问题是,虽然我知道谁在发帖(当前用户),但我不知道当前用户的个人资料在谁的个人资料上。我需要知道这一点,以便将新帖子分配给该用户的帖子。如何从当前查看的配置文件中提取用户id信息,以便我知道在哪里分配新帖子

我的micropost控制器看起来像:

class MicropostsController < ApplicationController
  before_filter :authenticate_user!

  def create
   @user_of_page = User.find_by_name(params[:id]) 
   @micropost = @user_of_page.microposts.build(params[:micropost])
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to :back
    else
      redirect_to about_path
    end
  end

  def destroy
  end
end
class MicropostsController
但是对于nil:NilClass,我得到了一个NoMethodError:undefined方法“microposts”。我假设这是因为我在创建user_of_page变量时犯了一些错误,但我不知道这是什么

解决方案

谢谢你,山姆。我接受了你的建议,结果是这样做的:

  • 我在我的Micropost表中添加了一个名为“属于”到“id”的列

  • 然后,我使用micropost表单中的隐藏字段将其配置文件正在从user show view显示的用户id传递给micropost控制器,如下所示:

       <%= form_for @micropost do |f| %>
       <%= render 'shared/error_messages', :object => f.object %>
    
       <div class="field">
          <%= f.label :content, "Why that mood?" %>
          <%= f.text_area :content %>
       </div>
    
       <div class="field">
          <%= f.hidden_field :author, :value => current_user.name %>
          <%= f.hidden_field :belongs_to_id, :value => @user.id %>
      <%= f.hidden_field :agree, :value => "0" %>
      <%= f.hidden_field :disagree, :value => "0" %>
      <%= f.hidden_field :amused, :value => "0" %>
       </div>
    
       <div class="actions">
          <%= f.submit "Submit" %>
       </div>
     <% end %>
    
    class MicropostsController < ApplicationController
      before_filter :authenticate_user!
    
      def create
       @user_of_page = User.find(params[:micropost][:belongs_to_id]) 
       @micropost = @user_of_page.microposts.build(params[:micropost])
        if @micropost.save
          flash[:success] = "Micropost created!"
          redirect_to :back
        else
           redirect_to about_path
        end
      end
    
      def destroy
      end
    end
    
    
    f、 对象%>
    当前用户名%>
    @user.id%>
    "0" %>
    "0" %>
    "0" %>
    
  • 然后,我使用此id值在micropost控制器中搜索要将帖子分配给的用户,如下所示:

       <%= form_for @micropost do |f| %>
       <%= render 'shared/error_messages', :object => f.object %>
    
       <div class="field">
          <%= f.label :content, "Why that mood?" %>
          <%= f.text_area :content %>
       </div>
    
       <div class="field">
          <%= f.hidden_field :author, :value => current_user.name %>
          <%= f.hidden_field :belongs_to_id, :value => @user.id %>
      <%= f.hidden_field :agree, :value => "0" %>
      <%= f.hidden_field :disagree, :value => "0" %>
      <%= f.hidden_field :amused, :value => "0" %>
       </div>
    
       <div class="actions">
          <%= f.submit "Submit" %>
       </div>
     <% end %>
    
    class MicropostsController < ApplicationController
      before_filter :authenticate_user!
    
      def create
       @user_of_page = User.find(params[:micropost][:belongs_to_id]) 
       @micropost = @user_of_page.microposts.build(params[:micropost])
        if @micropost.save
          flash[:success] = "Micropost created!"
          redirect_to :back
        else
           redirect_to about_path
        end
      end
    
      def destroy
      end
    end
    
    class MicropostsController

  • 魔法!再次感谢您,您帮助我正确地看待它。

    我会这样做:

    class profiles_controller < AC
      ...
      def show
        @profile = User.find(params[:id]).profile || current_user.profile
        @post = Post.new       
      end
      ..
    end
    
    /profiles/show.html.erb
    ... 
    Name: <%= @profile.full_name %> 
    ...
    <%= form_for @post do |f| %>
      <%= hidden_field_tag @profile.user %>
      ...
    <% end %>
    
    class microposts_controller < AC
      def create
        profile_user = User.find(params[:user_id]) # Owner of the profile current_user is on
        ..
      end
    end
    
    class profiles\u控制器

    没有测试。希望这有帮助。

    User.find\u by_name(params[:id])返回nil。重新检查是否有参数[:id]!就是这样!我不知道我是否有它…我假设它存在,因为该行在我的用户显示视图中成功使用。也许我应该澄清一下:这是识别拥有当前正在查看的配置文件的用户的正确方法吗?我只想将microspost分配给您发帖的页面的用户,但我不知道如何识别该用户