开发者

Saved user id in Posts model, how do I render that user?

开发者 https://www.devze.com 2023-03-07 18:34 出处:网络
When a user makes a post on a profile, the profile owner\'s user ID is saved as an integer in :poster (in the Post model). How do I find and render that user/user\'s information?

When a user makes a post on a profile, the profile owner's user ID is saved as an integer in :poster (in the Post model). How do I find and render that user/user's information?

More information:

  1. Using Slugged gem
  2. Trying to generate a feed of posts, when I call feed_item.user in my view, it directs me开发者_如何学Go to the user that posted the post, but not to the user who's profile the post was made on.

Feed Item View

Saved user id in Posts model, how do I render that user?

Feed View

Saved user id in Posts model, how do I render that user?

Pages Controller Home Function

Saved user id in Posts model, how do I render that user?

@postee is my feeble attempt to find the user based on the user id saved for each post. Ideally I would like to be able to link to the user who's profile the post was made on and also display information about that user in my view (e.g. the user's username). I've been tinkering for a while and am stuck, any thoughts? Thank you very much for your help and please let me know if any additional information is needed!

EDIT

Post Form View

<%= form_for @post do |f| %>
<%= f.hidden_field :name, :value => current_user.name %>
<%= f.hidden_field :poster, :value => @user.id %>
<div class="postbox">

  <div class="postfield">
    <%= f.text_area :content %>
  </div>
  <div class="postsubmit">
    <%= f.submit "Submit" %>
  </div>
</div>

User Controller Show Action

def show
  @user = User.find_by_cached_slug(params[:id])
  @posts = Post.find_all_by_poster(@user.id)
  @post = Post.new
if user_signed_in?
  @post = Post.new
  end

respond_to do |format|
  format.html # show.html.erb
  format.xml { render :xml => @user }
end
end


your method is slightly odd, in that you use the attribute :poster instead of :user_id which is the rails convention

Anyway, try sticking something like this in your view

@post.poster.email # to return the email address of your user

The code above depends on your user model having an :email attribute change email for whatever attribute you wish to return, whether it be username etc

Do you have a relationship between posts and users specified in your model? i.e. belongs_to :user

IS there a reason why you are not using the conventional of :model_name_id for your associated record?


Ultimately, I decided to do it in a non-railsy way, just to get the functionality working. Though I suspect that if you can somehow tie the user id in :poster to a new model with (has many, belongs to, etc...) relationships set up, it would work much better that way. (I believe that this is what stephenmurdoch's answer was attempting, there was just a problem with :user_id already being tied to the posting user.)

I saved more user information when each post was made, and then rendered the profile post receiver's information for each feed item. Also because user's have unique URLs based on cached_slug, I was able to use <%= link_to feed_item.postername, feed_item.postercachedslug %> to create a link to the profile the post was made on.

Post Form View

<%= form_for @post do |f| %>
<%= f.hidden_field :name, :value => current_user.name %>
<%= f.hidden_field :poster, :value => @user.id %>
<%= f.hidden_field :postername, :value => @user.name %>
<%= f.hidden_field :posterusername, :value => current_user.username %>
<%= f.hidden_field :postercachedslug, :value => @user.cached_slug %>
<div class="postbox">

  <div class="field">
    <%= f.text_area :content %>
  </div>
  <div class="submit">
    <%= f.submit "Submit" %>
  </div>
</div>

Feed Item view

<div class="profilepic">
<% if feed_item.user.profile_file_name == nil %>
<%= link_to image_tag("thumb.jpeg"), feed_item.user %>
<% else %>
  <%= link_to image_tag(feed_item.user.profile.url(:thumb)), feed_item.user %>
 <% end %>
</div>
<span class='feeditem'>
    <div class='row1'>
      <strong>
        <span class="user"><%= link_to feed_item.name, feed_item.user %> </span>
      </strong>
      <%= image_tag("arrow.png") %>
      <span class="name"><%= link_to feed_item.postername, feed_item.postercachedslug %></span>
    </div>
  <div class='row2'>
    <span class="content"><%= feed_item.content %></span>
  </div>
  <div class='row3'>
<span class="timestamp">
  <%= time_ago_in_words(feed_item.created_at) %> ago.
</span>
    <% if current_user?(feed_item.user) %>
        <%= link_to "delete", feed_item, :method => :delete,
                    :confirm => "You sure?" %>
    <% end %>
  </div>
  </span>
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号