Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

This my first ruby on rails application.

Model Location and Post, Location has many post.I create location as tree structure with ancestry gem.

class Post < ActiveRecord::Base
 belongs_to :location, :counter_cache => true
end

class Location < ActiveRecord::Base
 include Tree
 has_ancestry :cache_depth => true
 has_many :posts
end

This my Post Controller

class PostsController < ApplicationController
 before_action :set_post, only: [:show, :edit, :update, :destroy]

 def index
  @posts = Post.all
 end

 def show
 end

 def new
  @post = Post.new
 end


 def edit
 end

 def create
  @post = Post.new(post_params)

   respond_to do |format|
    if @post.save
     format.html { redirect_to @post, notice: 'Post was successfully created.' }
     format.json { render action: 'show', status: :created, location: @post }
    else
     format.html { render action: 'new' }
     format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

def update
 respond_to do |format|
  if @post.update(post_params)
   format.html { redirect_to @post, notice: 'Post was successfully updated.' }
   format.json { head :no_content }
  else
   format.html { render action: 'edit' }
   format.json { render json: @post.errors, status: :unprocessable_entity }
  end
 end
end

def destroy
 @post.destroy
  respond_to do |format|
   format.html { redirect_to posts_url }
   format.json { head :no_content }
  end
 end

private
 def set_post
  @post = Post.find(params[:id])
 end

# Never trust parameters from the scary internet, only allow the white list through.
 def post_params
  params.require(:post).permit(:name, :location_id)
 end
end

Creating Post with location in Post _form.html.erb

<%= simple_form_for @post do |f| %>
<% if @post.errors.any? %>
 <div id="error_explanation">
  <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:   </h2>
   <ul>
    <% @post.errors.full_messages.each do |msg| %>
     <li><%= msg %></li>
    <% end %>
   </ul>
  </div>
<% end %>

<%= f.input :name %>

<%= f.select :location_id, Location.all.at_depth(4) { |l| [ l.name, l.id ] } %>

 <div class="actions">
  <%= f.submit %>
 </div>
<% end %>

My question are

First question- f.select :location_id , how display location name, not location id, i am using with simple form

Second question- Post index got error in <%= post.location.name %>

<% @posts.each do |post| %>
 <tr>
  <td><%= post.name %></td>
  <td><%= post.location.name  %></td>
  <td><%= link_to 'Show', post %></td>
  <td><%= link_to 'Edit', edit_post_path(post) %></td>
  <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %>  </td>
</tr>
<% end %>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
180 views
Welcome To Ask or Share your Answers For Others

1 Answer

First question:

Check the simple_form syntax for a dropdown. It is mentioned in the docs and you should be able to get this working by yourself.

Second question:

Does the offending post really have a related location? If it does not have one, it can not display the name of course. To counter these nil errors, use try:

<%= post.location.try(:name)  %>

try will call the method name on location only if location is not nil.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...