我正在尝试添加一个指向我的帖子>索引页面的链接,该链接可让人们向帖子的创建者发送直接消息(使用简单私人消息)。
目前我有一个指向/ messages / new的链接来执行此操作,但这不起作用 - 当我尝试访问/ messages / new时,我的应用程序中出现以下错误。
我想用更好的方法替换/ messages / new(在下面的POSTS> INDEX文件中)的链接。如果您有任何想法,请告诉我!
**NoMethodError in Messages#new**
Showing /Users/fkhalid2008/loand/app/views/messages/new.html.erb where line #1 raised:
undefined method `user_messages_path' for #<#<Class:0x12a77f198>:0x12a76dce0>
Extracted source (around line #1):
1: <% form_for @message, :url => user_messages_path(@user) do |f| %>
2: <p>
3: To:<br />
4: <%= f.text_field :to %>
附加信息:应用程序本身就像Gumtree.com,用户来创建帖子(例如卖我的车),人们回复我发送消息(通过简单的Pvt消息插件)。
谢谢!
费萨尔
讯息&gt;新视图
<% form_for @message, :url => user_messages_path(@user) do |f| %>
<p>
To:<br />
<%= f.text_field :to %>
<%= error_message_on @message, :to %>
</p>
<p>
Subject:<br />
<%= f.text_field :subject %>
<%= error_message_on @message, :subject %>
</p>
<p>
Message<br />
<%= f.text_area :body %>
<%= error_message_on @message, :body %>
</p>
<p>
<%= submit_tag "Send" %>
</p>
<% end %>
消息模型
class Message < ActiveRecord::Base
is_private_message
attr_accessor :to
end
的routes.rb
Mysalary::Application.routes.draw do
resources :messages do
collection do
post :delete_selected
end
end
resources :users
resources :profiles
resources :pages
resources :posts
get "pages/home"
get "pages/about"
get "pages/legal"
get "pages/feedback"
root :to => 'posts#new'
end
消息控制器
class MessagesController < ApplicationController
before_filter :set_user
def index
if params[:mailbox] == "sent"
@messages = @user.sent_messages
else
@messages = @user.received_messages
end
end
def show
@message = Message.read_message(params[:id], current_user)
end
def new
@message = Message.new
if params[:reply_to]
@reply_to = @user.received_messages.find(params[:reply_to])
unless @reply_to.nil?
@message.to = @reply_to.sender.login
@message.subject = "Re: #{@reply_to.subject}"
@message.body = "\n\n*Original message*\n\n #{@reply_to.body}"
end
end
end
def create
@message = Message.new(params[:message])
@message.sender = @user
@message.recipient = User.find_by_login(params[:message][:to])
if @message.save
flash[:notice] = "Message sent"
redirect_to user_messages_path(@user)
else
render :action => :new
end
end
def delete_selected
if request.post?
if params[:delete]
params[:delete].each { |id|
@message = Message.find(:first, :conditions => ["messages.id = ? AND (sender_id = ? OR recipient_id = ?)", id, @user, @user])
@message.mark_deleted(@user) unless @message.nil?
}
flash[:notice] = "Messages deleted"
end
redirect_to :back
end
end
private
def set_user
@user = User.first
end
end
POSTS&gt; INDEX VIEW
<table class="table table-striped">
<tbody>
<% @posts.each do |post| %>
<tr>
<td>I am a <%= post.title %> getting married in <%= post.job %> in <%= post.location %>, and looking for a <%= post.salary %>. My budget is <%= post.salary %>.</td>
<td> <button class="btn" data-toggle="button" onClick="javascript:location.href = '/messages/new';" />Contact</button></td>
<td><%= time_ago_in_words(post.created_at) %> ago.</td>
<!--/.
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
-->
</tr>
<% end %>
</tbody>
</table>
答案 0 :(得分:1)
你routes.rb没有定义路径user_messages_path
,这很简单:)
如果你想要嵌套的restful路由,你需要像
这样的东西resources :users do
resources :messages
end
答案 1 :(得分:0)
只需使用
<% form_for @message do |f| %>
<% end %>