2014-03-29 39 views
1

我目前正在大学里建立此网站以获得乐趣。我希望它能帮助教育系统。无论如何,我仍然试图找出铁轨。我只是设置了没有问题的设计宝石。 然而,当我点击发布一个新的状态也给了我这个错误:状态中的NoMethodError#new

NoMethodError in Statuses#new 

Showing /Users/wyatt/Network/netbook/app/views/statuses/_form.html.erb where line #16 raised: 

undefined method `user_name' for #<Status:0x00000101ec36d0> 
Extracted source (around line #16): 

13: 
14: <div class="field"> 
15:  <%= f.label :user_name %><br /> 
16:  <%= f.text_field :user_name %> 
17: </div> 
18: <div class="field"> 
19:  <%= f.label :content %><br /> 

那么这里就是我的形式样子:

<%= form_for(@status) do |f| %> 
<% if @status.errors.any? %> 
<div id="error_explanation"> 
    <h2><%= pluralize(@status.errors.count, "error") %> prohibited this status from being saved:</h2> 

    <ul> 
    <% @status.errors.full_messages.each do |msg| %> 
    <li><%= msg %></li> 
    <% end %> 
    </ul> 
</div> 
<% end %> 

    <div class="field"> 
    <%= f.label :user_name %><br /> 
    <%= f.text_field :user_name %> 
    </div> 
<div class="field"> 
    <%= f.label :content %><br /> 
<%= f.text_area :content %> 
</div> 
<div class="actions"> 
<%= f.submit %> 
</div> 
<% end %> 

这里是我的控制器

class StatusesController < ApplicationController 
    # GET /statuses 
    # GET /statuses.json 
    def index 
    @statuses = Status.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @statuses } 
    end 
    end 

    # GET /statuses/1 
    # GET /statuses/1.json 
    def show 
    @status = Status.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @status } 
    end 
    end 

    # GET /statuses/new 
    # GET /statuses/new.json 
    def new 
    @status = Status.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @status } 
    end 
    end 

    # GET /statuses/1/edit 
    def edit 
    @status = Status.find(params[:id]) 
    end 

    # POST /statuses 
    # POST /statuses.json 
    def create 
    @status = Status.new(params[:status]) 

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

    # PUT /statuses/1 
    # PUT /statuses/1.json 
    def update 
    @status = Status.find(params[:id]) 

    respond_to do |format| 
     if @status.update_attributes(params[:status]) 
     format.html { redirect_to @status, notice: 'Status was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @status.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /statuses/1 
    # DELETE /statuses/1.json 
    def destroy 
    @status = Status.find(params[:id]) 
    @status.destroy 

    respond_to do |format| 
     format.html { redirect_to statuses_url } 
     format.json { head :no_content } 
    end 
    end 
end 
+2

你已经创建了数据库“USER_NAME”列?你运行迁移? – BroiSatse

+1

你能告诉我们“状态”模型吗? –

回答

0

从看它,似乎你想追加一个user_namestatus

错误

你的错误基本上意味着你没有在你的statuses数据有一个user_name列表。基本的修复将是创建一个迁移到user_name列添加到您的statuses DB:

$ rails generate migration AddUserNameToStatuses 

#db/migrations/AddUserNameToStatuses.rb 
class AddUserNameToStatuses < ActiveRecord::Migration 
    def change 
     add_column :statuses, :user_name, :string 
    end 
end 

$ rake db:migrate 

修复

我真的沟这一点,做到这一点:

#app/models/status.rb 
Class Status < ActiveRecord::Base 
    belongs_to :user #-> you need user_id column in statuses db 
    delegate :name, to: :user, prefix: true 
end 

#app/models/user.rb 
Class User < ActiveRecord::Base 
    has_many :statuses 
end 

这将允许您从表单中删除对user_name的引用 - 因为任何@status都会与相关的user

那么你可以使用.delegate()方法调用user_namestatuses

相关问题