不是路由与URL生成错误匹配

时间:2016-01-28 06:32:02

标签: ruby-on-rails ruby

我对Rails很新。如果问题看起来很愚蠢,请原谅我。我正在创建一个应用程序,用户可以上传故事供其他人阅读。登录后,他们也可以创建自己的个人资料。现在,用户提交故事,在故事索引页面中,我尝试列出故事标题以及提交者的名称。我正在尝试将提交者的名称作为链接显示提交者的个人资料显示页面。然而,这似乎不起作用。我尝试了各种各样的东西,但它没有给我解决方案。 这是我的用户模型

          <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.jaxrs</groupId>
                    <artifactId>jackson-jaxrs-json-provider</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jersey</groupId>
                    <artifactId>jersey-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jersey</groupId>
                    <artifactId>jersey-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jersey</groupId>
                    <artifactId>jersey-server</artifactId>
                </exclusion>
          </exclusions>

这是我的个人资料模型

class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, 
:recoverable, :rememberable, :trackable, :validatable,
:authentication_keys => [:login]
has_many :stories
has_one :profile, dependent: :destroy
attr_accessor :login
validate :validate_username

这是我的个人资料控制器

belongs_to :user

这是我的故事索引页面,我尝试用提交它的用户名字列出故事

before_action :authenticate_user!
#before_action :find_profile, only: [:show, :edit, :update, :destroy]

def index
  @profiles = Profile.all
end

def new
    @profile = Profile.new
end

def create
  @profile = Profile.new(profile_params)
  @profile.user_id = current_user.id if current_user
    if @profile.save
  flash[:success] = "Profile saved"
  redirect_to root_path
  else
  flash[:error] = "Error"
  render :new
  end
end

def show
    @profile = Profile.find(params[:id])
end

def update
    @profile = Profile.find(params[:id])
  if @profile.update_attributes(profile_params)
  flash[:success] = "Successfully updated"    # Optional
  redirect_to profile_path
  else
  flash[:error] = "Error"       # Optional
  render :edit
end
end

def edit
@profile = Profile.find(params[:id])
end

def destroy
    @profile = Profile.find(params[:id])
    @profile.destroy

    redirect_to root_path
end

private

 def profile_params
    params.require(:profile).permit
   ( :first_name, :last_name, :date_of_birth, :occupation, 
   :hobbies,   :about_me)
 end

点击&#34; story.user.username&#34;应该引导我到用户的个人资料显示页面。但是它会抛出以下错误

ActionStroller :: UrlGenerationError in Stories #index  显示/home/mahesh/storyteller/app/views/stories/index.html.erb第5行提出:

没有路由匹配{:action =&gt;&#34; show&#34;,:controller =&gt;&#34; profiles&#34;,:id =&gt; nil}缺少必需的键:[:id]

请帮忙。如果我必须发布更多信息,也请告诉我

2 个答案:

答案 0 :(得分:2)

此处 @profile传递为nil ,请检查个人资料对象,或者您正在尝试检查故事用户个人资料,然后传递story.user

  

profile_path(story.user)

答案 1 :(得分:0)

由于您不熟悉动态网站开发,因此您可以通过任何体验获得最多的想法。我决定以最小的风格构建你的应用程序的基本功能,以保持rails的DRY实践。它是available for you to clone

程序开发人员很难为您提供明确的答案,提供您提供的信息,以及我在您的应用程序上面看到的语法也可能存在问题。

在应用程序函数及其属性的描述中使用编程术语也是一种好习惯。 ^ R是一种复杂的OOP语言,其中R $是一个MVC架构框架,如果你无法使用PT正确描述它,那么开发人员很难帮助你。成功成为一名优秀而狂热的职业开发者需要很多失败。 (持久性)是关键值=“勤奋”。

我在Story-application中为我提供了一些优秀的RoR在线资源,供您学习。请按照自述说明进行操作。快乐的编码!