我是ROR的新手,正在开展一个小项目。最近我添加了友好的ID宝石,并按照文档中的说明进行操作。但我似乎无法使URL工作。我将友好ID添加到社区模型,这基本上是你的帖子模型。
路线代码:
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate: insert into Vehicle (vehiclename, vehicle d type, vehicleid) values (?, 'Vehicle', ?)
Exception in thread "main" org.hibernate.exception.SQLGrammarException: ORA-00917: missing comma
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at com.sun.proxy.$Proxy14.executeUpdate(Unknown Source)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:56)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2849)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3290)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:80)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:272)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:264)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:186)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1081)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:315)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
at org.javab.hibernate.Transport.main(Transport.java:42)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00917: missing comma
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1010)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1315)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
... 16 more
我甚至尝试过to_param来获取URL。但似乎没有任何效果。
控制器代码:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@sae.corpxxxxxxxxxxxe.com:1600/crmrtld</property>
<property name="connection.username">XXXXXXXXX</property>
<property name="connection.password">XXXXXXXXXXXXXXXXXr</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- Disable the second-level cache -->
<!-- <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> -->
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- Name the annotated Entity -->
<mapping class="org.javab.Userdetails"></mapping>
<mapping class="org.javab.Vehicle"></mapping>
<mapping class="org.javab.Fourwheel"></mapping>
<mapping class="org.javab.Twowheel"></mapping>
</session-factory>
</hibernate-configuration>
但如果我输入http://localhost:3000/communities/post.title这样的网址,我可以直接转到该帖子。这意味着slug已经创建并且它们正在运行。但我似乎无法将它们显示在URL上。 我尝试了许多排列和组合,但似乎没有任何效果。
非常感谢任何帮助。如果您需要任何其他特定代码,请告诉我。
仅供参考:迁移代码:
class Community < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: [:slugged, :history]
validates :title, :length => { :minimum => 5 }
has_attached_file :post_image, :styles =>
{ :medium => "300x300>", :thumb => "100x100>", :large => "1280x720", :headline => "1280x720"}
validates_attachment_content_type :post_image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
belongs_to :member
has_many :comments
scope :newest_first, lambda { order("communities.created_at DESC")}
scope :without_community, lambda{|community| community ? {:conditions => ["community.id != ?", @community.id]} : {} }
# def to_param
# "#{id}-#{title.parameterize}"
# end
end
Friendly_ID迁移代码:
class CommunitiesController < ApplicationController
before_action :set_community, only: [:show, :edit, :update, :destroy]
layout "community"
before_filter :authenticate_member!, except: [:index, :show]
require 'will_paginate/array'
# GET /communities
# GET /communities.json
def index
@communities = Community.newest_first.friendly.where(params[:id]).paginate(page: params[:page], per_page: 9)
end
# GET /communities/1
# GET /communities/1.json
def show
@communities = Community.newest_first.friendly.where(params[:title]).paginate(page: params[:page], per_page: 5).where('id NOT IN (?)', @community.id)
end
# GET /communities/new
def new
@community = Community.new({:member_id => current_member.id})
end
# GET /communities/1/edit
def edit
end
# POST /communities
# POST /communities.json
def create
@community = Community.new(community_params)
respond_to do |format|
if @community.save
format.html { redirect_to @community, notice: 'Post: #{@community.title.capitalize} was successfully created.' }
format.json { render :show, status: :created, location: @community }
else
format.html { render :new }
format.json { render json: @community.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /communities/1
# PATCH/PUT /communities/1.json
def update
respond_to do |format|
if @community.update(community_params)
format.html { redirect_to @community, notice: 'Post: #{@community.title.capitalize} was successfully updated.' }
format.json { render :show, status: :ok, location: @community }
else
format.html { render :edit }
format.json { render json: @community.errors, status: :unprocessable_entity }
end
end
end
# DELETE /communities/1
# DELETE /communities/1.json
def destroy
@community.destroy
respond_to do |format|
format.html { redirect_to communities_url, notice: 'Post: #{@community.title.capitalize} was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_community
@community = Community.friendly.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def community_params
params.require(:community).permit(:name,:post_image, :title, :content, :member_id)
end
end
答案 0 :(得分:0)
深入研究代码,发现slu is正在形成。只是URL没有正确链接。对链接进行了一些更改,以使用slugs而不是:id来使其正常工作。
非常感谢@uzaif