邮政与位置之间的关联 [英] Association between Post and Location
问题描述
这是我的第一个ruby on rails应用程序。
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
这是我的帖子控制器
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
使用Post _form.html.erb中的位置创建Post
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 %>
我的问题是
第一个问题-f.select:location_id,如何显示位置名称,而不是位置ID,我使用的是简单格式
第二个问题-帖子索引出错<%= post.location.name%>
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 %>
推荐答案
第一个问题:
检查 simple_form
语法是否存在下拉菜单。它在文档中提到,您应该可以自己完成这项工作。
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.
第二个问题:
有问题的帖子
确实有一个相关的位置
?如果没有,则无法显示课程名称。要解决这些 nil
错误,请使用 try
:
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
将调用方法<$ c仅在位置
上的$ c>名称零。
try
will call the method name
on location
only if location
is not nil
.
这篇关于邮政与位置之间的关联的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!