2013-03-19 3 views
0

(извините за мой английский)Rails 'stringify_keys'

Я пробовал свое первое веб-приложение для рельсов. Вот мой код:

Модель:

class Movie < ActiveRecord::Base  

    attr_accessible :about, :title, :url 

end 

Контроллер:

class MoviesController < ApplicationController 

    def show 

    @movie = Movie.find(params[:id]) 

    end 

    def update 

    @mov = Movie.find(params[:id]) 

    if @mov.update_attributes(params[:id]) 

     redirect_to movies_path, :notice => "Your movie has been updated." 

    else 

     render "show" 

    end 
    end 


    def destroy 

    end 

end 
  • Вид и
<%= form_for @movie do |m| %> 
<center> 
    <table> 
    <td valign='middle' align='right'> 
     Title: 
    </td> 
    <td> 
     <%= m.text_field :title %> 
    </td> 
<tr> 
    <td valign='middle' align='right'> 
     Description: 
    </td> 
    <td> 
     <%= m.text_area :about %> 
    </td> 
<tr> 
    <td valign='middle' align='right'> 
     URL: 
    </td> 
    <td> 
    <%= m.text_field :url, :id => "url" %><input type='file' onchange="document.getElementById('url').value = this.value" /> 
    </td> 
<tr> 
    <td> 
    </td> 
    <td> 
     <center> 
     <%= m.submit %> 
     </center> 
    </td> 
    </table> 
</center> 
<% end %> 

так это update действие, и это выдаст сообщение об ошибке После нажатия кнопки формы обновления ошибки:

undefined method `stringify_keys' for "15":String 

, так что я снова попробовать с Movie.find(params[:id].to_i) и выход:

undefined method `stringify_keys' for 15:Fixnum 

спасибо за ответы, хорошо провели день! =)

+1

использование Movie.find (PARAMS [: ID] .to_i) и использовать @ mov.update_attributes (PARAMS [: фильм]) вместо @ mov.update_attributes (PARAMS [: ID]) –

+1

Может быть проблема с @ mov.update_attributes (params [: id]). вы прошли params [: id], но это неправильно, вам нужно пройти params [: movie]. –

+0

@SachinR yo win –

ответ

5
if @mov.update_attributes(params[:id]) 

Его причина вышеуказанной строки. Здесь вы пытаетесь обновить атрибут @mov с параметрами [: id], что неверно.

обновление действие в контроллере должно быть следующим.

def update 
    @mov = Movie.find(params[:id]) 
    if @mov.update_attributes(params[:movie]) 
    redirect_to movies_path, :notice => "Your movie has been updated." 
    else 
    render "show" 
    end 
end 

В основном update_attributes будет проверять хэш в качестве параметра, как показано ниже.

@mov.update_attributes(:about => "Sample About", :title => "Sample Title", :url => "Sample URL")