Rails'stringify_keys'

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)
  • 和观点
    <%= 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 %>
Run Code Online (Sandbox Code Playgroud)

所以这是一个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)

谢谢你的回答,祝你有个美好的一天!=)

Sag*_*idi 5

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)