Ben*_*gúz 0 ruby ruby-on-rails
(对不起我的英语不好)
我正在尝试我的第一个rails web应用程序.这是我的代码:
模型:
class Movie < ActiveRecord::Base
attr_accessible :about, :title, :url
end
Run Code Online (Sandbox Code Playgroud)
控制器:
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
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)<%= 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
Run Code Online (Sandbox Code Playgroud)
所以我再试一次,Movie.find(params[:id].to_i)输出是:
undefined method `stringify_keys' for 15:Fixnum
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答,祝你有个美好的一天!=)
if @mov.update_attributes(params[:id])
Run Code Online (Sandbox Code Playgroud)
因为上面这行.在这里,您尝试使用params [:id]更新@mov属性,这是错误的.
控制器中的更新操作应如下所示.
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
Run Code Online (Sandbox Code Playgroud)
基本上update_attributes将检查hash作为如下参数.
@mov.update_attributes(:about => "Sample About", :title => "Sample Title", :url => "Sample URL")
Run Code Online (Sandbox Code Playgroud)