【问题标题】:track model not being created in my rails app没有在我的 Rails 应用程序中创建轨道模型
【发布时间】:2013-06-07 19:48:53
【问题描述】:

在我的 Rails 应用程序中,我遇到了问题。作为提醒,我正在使用设计。

tracks_controller.rb

def new
  @track = Track.new
end

def create
  @track = current_user.tracks.build(params[:content])
  if @track.save
    flash[:success] = "Track created!"
    redirect_to @user 
  else
    render 'static_pages/home'
  end

users_controller.rb

def show
  @user = User.find(params[:id])
  @tracks = @user.tracks
  if signed_in?
    @track  = current_user.tracks.build
  end
end

我以当前用户身份登录,当我尝试(通过当前用户)添加新曲目时,它没有保存..(而是重定向到 root_url)

track.rb

class Track < ActiveRecord::Base
  attr_accessible :content
  belongs_to :user
end

用户.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :username, :email, :password, :password_confirmation, :remember_me
  # attr_accessible :title, :body

  validates :username, uniqueness: {  case_sensitive: false }

  has_many :tracks, dependent: :destroy

end

共享/_track_form.html.erb

<%= form_for(@track) do |f| %>
<div class="track_field">
    <%= f.text_area :content, placeholder: "Upload a youtube song URL...", :id => "message_area" %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>

/users/show.html.erb 的相关部分

<div class="span8">
    <% if signed_in? %>
        <section>
            <%= render 'shared/track_form' %>
        </section>
    <% end %>

我相信问题出在我的 TracksController #create 方法中,但我就是想不通。非常感谢任何帮助,谢谢!

【问题讨论】:

  • 我首先猜想 params[:content] 实际上应该是 params[:track][:content] 或类似的东西,尽管你应该可以只给它 params[:track] 除非你有额外的字段在你的形式。此外,您可以改用save!,这会引发异常,可能会为您提供更多线索。

标签: ruby-on-rails devise actioncontroller


【解决方案1】:

在你的控制器create动作改变

@track = current_user.tracks.build(params[:content])

到这里

@track = current_user.tracks.build(params[:track])

由于您使用了form_for(@track),params 哈希将包含填写到表单中的:content 字段。

现在create 操作无法找到:content 表单,因为没有名为content 的表单。 contentTrack 模型的属性。

【讨论】:

  • 感谢您的帮助 - 为我解决了问题 - 干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2021-05-10
  • 2016-10-15
  • 1970-01-01
  • 2023-01-25
相关资源
最近更新 更多